coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Apache httpd 2.2.4でWebDAV + ssl + Digest

2007-02-15 21:09:49 | Apache httpd
前回で OpenSSL の設定も終わりクライアント認証もできたので、WebDAV + ssl + Digest 認証を試してみます。

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 について試してみます。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« OpenSSLについて その5 | トップ | WebDAVで気になること »
最新の画像もっと見る

コメントを投稿

Apache httpd」カテゴリの最新記事