WebDAVをSSLで接続する

なぜ

WebDAVを使うときにセキュアな接続じゃないと……と

環境

Ubuntu Server 8.04
apache 2.2.8
openssl 0.9.8g

やりかた

OpenSSLで秘密鍵、証明書要求、CA証明書をつくる

/etc/openssl.cnfの内容を変更しておく

dir = /etc/ssl/hogehoge

あたりに変更しておく。mkdir hogehogeもしておく。あと後に証明書発行時に入力する分を先に変更しておくと楽

countryName_default = JP
stateOrProvinceName_default = dokoka
commonName_default = hogehoge
......

実際に秘密鍵、CSR、証明書を作る

sudo openssl genrsa -out server.key 1024
sudo chmod 400 server.key
sudo openssl req -new -key server.key -out csr.pem -sha1
sudo openssl x509 -in csr.pem -out server.crt -req -signkey server.key -days 3650 -sha1
apacheSSLを組み込む
sudo a2enmod ssl
sudo cp /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz /etc/apache2/sites-available/
cd /etc/apache2/sites-available/
sudo gunzip httpd-ssl.conf.gz

sudo vi httpd-ssl.conf

#Listen 443

NameVirtualHost *:443

に修正

SSLCertificateFile "/etc/ssl/hogehoge/server.crt"
SSLCertificateKeyFile "/etc/ssl/hogehoge/serer.key"
sudo a2ensite ssl
sudo /etc/init.d/apache2 restart

つまったところ

公開鍵認証のしくみについてよくわかっていなくてどう直せばいいかわかりにくかった

いろんなところからコピペしたり改変しているうちにぐちゃぐちゃに……共通鍵認証はわかりやすいけど、公開鍵認証は秘密鍵と公開鍵、証明書と承認局など手順がそれなりにあるのできっちり理解してないとトラブルシューティングがしづらいですね。

VirtualHostの設定をミスっていた

/var/log/apache2/access.logをみると

"\x16\x03"

というログが流れていた。なんだろうと思いググってみるとどうやらHTTPのリクエストをHTTPSとして処理されてしまうためらしい。あちこちいじっていたときに/apache2/sites-available/defaultのVirtualHostNameを削除していたためらしい。だからdefaultで *:80を処理して、httpd-sslで *:443を処理するようにするようVirtualHostNameを書き換えたらうまくいった。

感想とか反省とか

簡単なはずなのになぜできない!ということがよくあるのだけれど、そういうときは単純な間違いをしていることが多い。難しい部分はたいがいググればみつかる。今回もssl.cnfのディレクトリのパスを間違えていただけとか、apacheのVirtualHostNameを片方消していたなんてね。ディレクトリのパーミッションを忘れていてアクセスできないってこともあったし……。