前回で OpenSSL の設定も終わりクライアント認証もできたので、WebDAV + ssl + Digest 認証を試してみます。
Apache httpd で ssl をクライアント認証にしておけば、クライアント証明書と自己認証型CA証明書を持っていないとアクセスできません。さらに WebDAV を使うときはDigest認証でパスワードを求められますから、一応安全といえるかもしれません。(本当は全部いっぺんに試してみたかっただけです。)
あらかじめ OpenSSL で証明書を用意して、それを httpd に反映しておきます。http の参照と https の参照は分離しておきます。ここでは、
ドキュメントルートにします。
すでに、httpd は WebDAV に対応するようにコンパイルしてあります。
クライアント認証の設定も済んでいます。httpd 2.2.4 の設定ファイル httpd.conf,httpd-ssl.conf,httpd-dav.conf を修正します。気になる点だけ示すと、
ここの LimitExcept は、このディレクトリを Web で公開するためです。ファイルのやり取りだけに使いたい場合はこれなしで直接 require を普通に指定すれば良いです。必要なディレクトリやパスワードファイルを準備します。
Windows XP で試してみます。「マイネットワーク」→「ネットワークプレースを追加する」→「ネットワークプレースの追加ウィザード」ウィンドウ →「次へ」→「別のネットワークの場所を選択」→「次へ」
ここで、アドレス https://www.example.co.jp/dav/ を指定し、
「デジタル証明書の選択」でクライアント証明書を選択する →「ネットワークのパスワードを入力」ウィンドウ→ユーザー名、パスワードで htdigest で指定したものを入れるとアイコンが作成され、開くと指定したディレクトリが Windows のフォルダとして開けました。
ここで、/home/data/davhome の下に dav ディレクトリを作ったのは、Digest パスワードファイルを利用者ごとに作成して、利用するディレクトリも分けようとの意図からです。つまり、/home/data/davhome/dav が参照できるのは、/usr/local/etc/password/davuser1.passwd にユーザ登録されている利用者だけです。
ところで、ssl を利用しない場合に「ネットワークプレースに追加」しようとして、ユーザとパスワードを入力してもうまく動作しません。その場合は、アドレスの最後に ? 文字を付けるそうです。Windows XP のWebDAV実装がそうなっているらしいです。? を入れるとユーザとパスワードを入力するウィンドウの形も明らかに変わっており確かにおかしいです。このことが報告されていた
(http://mtlab.ecn.fpu.ac.jp/WSM_2004/040601170336.html)
でご指摘のとおり、
Digest: user`サーバ名ユーザ名' in realm `realm名' not found /dav
のようなログがでます。
ということは、Windows XP では、https の時(もしかしたらクライアント認証だけ?)だけ「?」文字が要らないようです。これはびっくりです。いったいいかなる仕様でしょうか。
次回もう少し、WebDAV について試してみます。
Apache httpd で ssl をクライアント認証にしておけば、クライアント証明書と自己認証型CA証明書を持っていないとアクセスできません。さらに WebDAV を使うときはDigest認証でパスワードを求められますから、一応安全といえるかもしれません。(本当は全部いっぺんに試してみたかっただけです。)
あらかじめ OpenSSL で証明書を用意して、それを httpd に反映しておきます。http の参照と https の参照は分離しておきます。ここでは、
http://www.example.co.jp/ なら、 /home/data/www を https://www.example.co.jp/ なら、 /home/data/davhome を
ドキュメントルートにします。
すでに、httpd は WebDAV に対応するようにコンパイルしてあります。
クライアント認証の設定も済んでいます。httpd 2.2.4 の設定ファイル httpd.conf,httpd-ssl.conf,httpd-dav.conf を修正します。気になる点だけ示すと、
・/usr/local/httpd224/conf/httpd.conf User www Group www Include conf/extra/httpd-dav.conf Include conf/extra/httpd-ssl.conf ・/usr/local/httpd224/conf/extra/httpd-ssl.conf DocumentRoot "/home/data/davhome" ServerName www.example.co.jp:443 ServerAdmin root@example.co.jp SSLEngine on SSLCertificateFile /usr/local/keys/server/server.crt SSLCertificateKeyFile /usr/local/keys/server/servernp.key SSLCACertificatePath /usr/local/keys/CA/ SSLCACertificateFile /usr/local/keys/CA/cacert.crt SSLVerifyClient require SSLVerifyDepth 10 <Directory "/home/data/davhome"> Options None AllowOverride None Order allow,deny Allow from 192.168.1 </Directory> ・/usr/local/httpd224/conf/httpd-dav.conf DavLockDB "/usr/local/var/dav/DavLock" Alias /dev "/home/data/davhome/dav" <Directory "/home/data/davhome/dav"> Dav On Order Allow,Deny Allow from 192.168.1 AuthType Digest AuthName DAV-upload AuthUserFile "/usr/local/etc/password/davuser1.passwd" <LimitExcept GET OPTIONS> require user espiya </LimitExcept> </Directory>
ここの LimitExcept は、このディレクトリを Web で公開するためです。ファイルのやり取りだけに使いたい場合はこれなしで直接 require を普通に指定すれば良いです。必要なディレクトリやパスワードファイルを準備します。
# mkdir /usr/local/etc/password # mkdir /usr/local/var/dav # chown www.www /usr/local/var/dav # mkdir /home/data/davhome # mkdir /home/data/davhome/dav # chmod 0775 /home/data/davhome/dav # chown www.www /home/data/davhome/dav # htdigest -c '/usr/local/etc/password/davuser1.passwd' DAV-upload espiya .............. Digest 認証のパスワード作成 # /etc/init.d/httpd restart
Windows XP で試してみます。「マイネットワーク」→「ネットワークプレースを追加する」→「ネットワークプレースの追加ウィザード」ウィンドウ →「次へ」→「別のネットワークの場所を選択」→「次へ」
ここで、アドレス https://www.example.co.jp/dav/ を指定し、
「デジタル証明書の選択」でクライアント証明書を選択する →「ネットワークのパスワードを入力」ウィンドウ→ユーザー名、パスワードで htdigest で指定したものを入れるとアイコンが作成され、開くと指定したディレクトリが Windows のフォルダとして開けました。
ここで、/home/data/davhome の下に dav ディレクトリを作ったのは、Digest パスワードファイルを利用者ごとに作成して、利用するディレクトリも分けようとの意図からです。つまり、/home/data/davhome/dav が参照できるのは、/usr/local/etc/password/davuser1.passwd にユーザ登録されている利用者だけです。
ところで、ssl を利用しない場合に「ネットワークプレースに追加」しようとして、ユーザとパスワードを入力してもうまく動作しません。その場合は、アドレスの最後に ? 文字を付けるそうです。Windows XP のWebDAV実装がそうなっているらしいです。? を入れるとユーザとパスワードを入力するウィンドウの形も明らかに変わっており確かにおかしいです。このことが報告されていた
(http://mtlab.ecn.fpu.ac.jp/WSM_2004/040601170336.html)
でご指摘のとおり、
Digest: user`サーバ名ユーザ名' in realm `realm名' not found /dav
のようなログがでます。
ということは、Windows XP では、https の時(もしかしたらクライアント認証だけ?)だけ「?」文字が要らないようです。これはびっくりです。いったいいかなる仕様でしょうか。
次回もう少し、WebDAV について試してみます。
※コメント投稿者のブログIDはブログ作成者のみに通知されます