自前サーバのWebDAVをWindows7の標準WebDAV機能で利用しようとしたらすげー苦労した 
2016/09/01 Thu.
今更ながらWebDAVを使いたい要件が出来、自前サーバーにWebDAVを入れてみた。
そして、フリーのWebDAVクライアントでの接続までは簡単に出来ました。
しかし、オフィスなど他のアプリとの連携が使いづらい。
そこで、Windows7のエクスプローラにネットワークドライブとして組み込みたいな。と思って接続しようとしたら、どうやっても認証が通らない。
スゲー悩んだ末何とか動いたので備忘録。
そして、フリーのWebDAVクライアントでの接続までは簡単に出来ました。
しかし、オフィスなど他のアプリとの連携が使いづらい。
そこで、Windows7のエクスプローラにネットワークドライブとして組み込みたいな。と思って接続しようとしたら、どうやっても認証が通らない。
スゲー悩んだ末何とか動いたので備忘録。
■WebDAVをWindows7標準機能で利用する条件
Windows7の標準WebDAV機能は接続条件が非常に厳しい。
(1)WebClientサービスが起動している
(2)認証機能が必要で接続にSSLが必要
(3)サーバー証明書がWindowsにインストールされている
(4)サーバー証明書のCN(Common Name)とWebDAVの接続先ホスト名が一致する
(5)サーバー(https)がSSL3.0に対応している
一つ一つ見ていこう。
(1)WebClientサービスが起動している
これはWindowsのサービスを確認して開始するだけ。基本的には触る必要がない。
(2)認証機能が必要で接続にSSLが必要
(3)サーバー証明書がWindowsにインストールされている
(4)サーバー証明書のCN(Common Name)とWebDAVの接続先ホスト名が一致する
WEBサーバーをSSL対応にする必要があり、証明書が問題となるが、今は「Let's encrypt」という便利なサービスがある。
これでSSLサーバ証明書を取得すれば「(2)」「(3)」をクリアします。
ただ、ここで「(4)」が気になります。
というのも、Let's encryptは同一ドメインでの複数SSL取得に制限を設けている。
そこで、一つの証明書に複数ドメイン(ホスト)を登録する「SAN(Subject Alternative Name)」を利用すると思います。
しかし、この場合、証明書の「コモンネーム(Common Name = CN)」には最初に指定したFQDNが登録されます。
そのFQDNとWebDAVのFQDNが一致していないと「(4)」で引っかかる様な気がします。
しかし、杞憂でした。
一つの証明書に複数ホストを登録してWebDAV用もそこに混ぜ込んだSSL証明書を作成しましたが、問題ありませんでした。
(5)サーバー(https)がTLS1.0に対応している
今回ここではまりました。
サーバーのセキュリティを高めるための設定を施したところ、設定を誤り「TLS1.2」でしか接続できない設定なってました。
それに気が付かず「あーだこーだ」と遠回りをしていてようやく気が付いたしだいです。
もう少し詳しく補足すると、「TLS1.0」プロトコルは有効なんですが、それの暗号スウィートをことごとく無効にしていました。
その場合、Windows7のWebDAVクライアントは一応接続しに行くんですね。しかし、認証が通らない。ひょっとすると、認証は通っているがその後の接続で失敗しているのかも。
まあ、そういう動きをします。
それで、暗号スウィートを用意してあげれば「TLS1.0」で無事つながるようになりました。
今回私が行った作業
●サーバー構成
Apache2.2
コンパイル時にConfigureで「--enable-dav」を指定しWebDAV機能を静的に組み込みました。
WebDAVのFQDNを「webdav.tori.atama」とする。
●SSLサーバ証明書に「Let's encrypt」を利用
●WebDAVディレクトリがApacheユーザーで読み書きできるようにパーミッションを設定
●httpd.confの設定
Apache2.2でWebDAVを利用するためには以下のモジュールが組み込まれている必要があります。
dav_module
dav_fs_module
確認は
Dav On
を指定するだけでWebDAV機能は利用できるようになります。
しかし、それだけではセキュリティに問題があるので「Basic認証」を使うと思いますが、その場合「SSL」が必要になります。
「SSLCipherSuite」は以下のサイトを利用しました。
●Mozilla SSL Configuration Generator
めちゃくちゃ便利です。
■付随豆知識
●インストールされている証明書の確認・削除
「ウィンドウズ・スタート」ボタンクリック
↓
「プログラムとファイルの検索」に「certmgr.msc」と打ち込んでエンター。
↓
「信頼されたルート証明書」→「証明書」
●SSL証明書や設定内容を分析して安全度を調べる「SSLチェッカー」
https://globalsign.ssllabs.com/
「Do not show the results on the boards」
にチェックを入れないと、診断したURLがさらされてしまいます。
ま、あえて曝すという手もありますがね。あえてね。
Windows7の標準WebDAV機能は接続条件が非常に厳しい。
(1)WebClientサービスが起動している
(2)認証機能が必要で接続にSSLが必要
(3)サーバー証明書がWindowsにインストールされている
(4)サーバー証明書のCN(Common Name)とWebDAVの接続先ホスト名が一致する
(5)サーバー(https)がSSL3.0に対応している
※2016年9月6日
と先日記事を書いたのですが、もう少し調べてみたら「(5)」が間違えていました。ただしくは
(5)サーバー(https)がTLS1.0に対応している
です。
この修正に伴い文面を書き直しました。
と先日記事を書いたのですが、もう少し調べてみたら「(5)」が間違えていました。ただしくは
(5)サーバー(https)がTLS1.0に対応している
です。
この修正に伴い文面を書き直しました。
一つ一つ見ていこう。
(1)WebClientサービスが起動している
これはWindowsのサービスを確認して開始するだけ。基本的には触る必要がない。
(2)認証機能が必要で接続にSSLが必要
(3)サーバー証明書がWindowsにインストールされている
(4)サーバー証明書のCN(Common Name)とWebDAVの接続先ホスト名が一致する
WEBサーバーをSSL対応にする必要があり、証明書が問題となるが、今は「Let's encrypt」という便利なサービスがある。
これでSSLサーバ証明書を取得すれば「(2)」「(3)」をクリアします。
ただ、ここで「(4)」が気になります。
というのも、Let's encryptは同一ドメインでの複数SSL取得に制限を設けている。
そこで、一つの証明書に複数ドメイン(ホスト)を登録する「SAN(Subject Alternative Name)」を利用すると思います。
しかし、この場合、証明書の「コモンネーム(Common Name = CN)」には最初に指定したFQDNが登録されます。
そのFQDNとWebDAVのFQDNが一致していないと「(4)」で引っかかる様な気がします。
しかし、杞憂でした。
一つの証明書に複数ホストを登録してWebDAV用もそこに混ぜ込んだSSL証明書を作成しましたが、問題ありませんでした。
(5)サーバー(https)がTLS1.0に対応している
今回ここではまりました。
サーバーのセキュリティを高めるための設定を施したところ、設定を誤り「TLS1.2」でしか接続できない設定なってました。
それに気が付かず「あーだこーだ」と遠回りをしていてようやく気が付いたしだいです。
もう少し詳しく補足すると、「TLS1.0」プロトコルは有効なんですが、それの暗号スウィートをことごとく無効にしていました。
その場合、Windows7のWebDAVクライアントは一応接続しに行くんですね。しかし、認証が通らない。ひょっとすると、認証は通っているがその後の接続で失敗しているのかも。
まあ、そういう動きをします。
それで、暗号スウィートを用意してあげれば「TLS1.0」で無事つながるようになりました。
今回私が行った作業
●サーバー構成
Apache2.2
コンパイル時にConfigureで「--enable-dav」を指定しWebDAV機能を静的に組み込みました。
WebDAVのFQDNを「webdav.tori.atama」とする。
●SSLサーバ証明書に「Let's encrypt」を利用
# certbot certonly --webroot -w /var/www/webdav -d webdav.tori.atama -m root@tori.atama --agree-tos
●WebDAVディレクトリがApacheユーザーで読み書きできるようにパーミッションを設定
# chown apacheUser:apacheGroup /var/www/webdav
# chmod 755 /var/www/webdav
# chmod 755 /var/www/webdav
●httpd.confの設定
ServerName webdav.tori.atama
DocumentRoot /var/www/webdav
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLCertificateFile /usr/local/etc/letsencrypt/live/webdav.tori.atama/cert.pem
SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/webdav.tori.atama/privkey.pem
SSLCertificateChainFile /usr/local/etc/letsencrypt/live/webdav.tori.atama/chain.pem
DAVLockDB /var/www/lockdb
Dav On
AuthType Basic
AuthName "Secure WevDAV"
AuthUserFile /var/www/.htpasswd
Require valid-user
Apache2.2でWebDAVを利用するためには以下のモジュールが組み込まれている必要があります。
dav_module
dav_fs_module
確認は
# httpd -M
組み込まれているなら「httpd.conf」にDav On
を指定するだけでWebDAV機能は利用できるようになります。
しかし、それだけではセキュリティに問題があるので「Basic認証」を使うと思いますが、その場合「SSL」が必要になります。
「SSLCipherSuite」は以下のサイトを利用しました。
●Mozilla SSL Configuration Generator
めちゃくちゃ便利です。
■付随豆知識
●インストールされている証明書の確認・削除
「ウィンドウズ・スタート」ボタンクリック
↓
「プログラムとファイルの検索」に「certmgr.msc」と打ち込んでエンター。
↓
「信頼されたルート証明書」→「証明書」
●SSL証明書や設定内容を分析して安全度を調べる「SSLチェッカー」
https://globalsign.ssllabs.com/
「Do not show the results on the boards」
にチェックを入れないと、診断したURLがさらされてしまいます。
ま、あえて曝すという手もありますがね。あえてね。
- 関連記事
category: サーバー
この記事へのコメント
コメントの投稿
コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。
内容によっては表示されない場合がありますことご了承願います。