Apache HTTP サーバー for Windows (with SSL) ではまる

WebDAV で簡易ファイル共有をしたくて、かつ、Windows XP では WebDAV の Basic 認証が無効*1なので、SSL 付きの ApacheWindows XP にインストールしました。ここで注意しておかなくてはいけないのは、私は Windows をサーバーとして使う気持ちは毛頭なくて、あくまでも PC 間でのファイルコピーと、Apache の実験目的に使うだけです。本当は、VMware 上の NetBSD で Samba を動かすというアイデアもありましたが、あまりに遠回りなので諦めました。
さて、上記を簡単に実現できたかというと、実は非常にはまりました。結論から言いますが、

  • Cygwin をインストールしている時は要注意。セットアップに Cygwin を使うと、いろんな意味ではまります。
  • このチュートリアルを良く読みましょう。古い情報は、今となっては正確でない場合があります。(古い情報も、筆者の方が書いたときは最新だったはずで、筆者の方に責任はありません。)

最初に、Apache HTTP サーバーのバイナリ(SSL 付き)は、ここからダウンロードしました。

Cygwin に注意

Apache のセットアップ時、各種ディレクトリを作成したり OpenSSL の鍵ファイルを作成したりすると思いますが、Cygwin の mkdir などで作業すると、ディレクトリやファイルのパーミッションに問題があるらしく、動作に問題が出ることがあるようです*2。素直に Windows 上で操作したほうが良いようです。
さて、

OpenSSL について

openssl コマンドを実行すると、openssl.cnf ファイルがないために警告(エラー)が出ます。気にしなくて良いのかも知れませんが、私は Cygwin 用にインストールされていた openssl.cnf をコピーし、Windows のユーザー環境変数 OPENSSL_CONF にパスを設定しました。なお、Unix 用の Apache 2.0.53 と OpenSSL では経験しなかったのですが、OpenSSL の鍵(証明書?)のパスフレーズを明示的に指定しないと、apache が正常に起動しないことが分かりました。これに関しては、パスワードをエコーバックするバッチファイルを書いて、それを ssl.conf に

SSLPassPhraseDialog  exec:conf/passwd.bat

のように記述しました。これは、前述のチュートリアルにも出てきます。バッチファイルの内容は、例えば

@echo chichin-puipui

のようにします。

以下、作業を順序に従って簡単に記しておきます。

  1. Apache バイナリパッケージの展開。httpd.conf を見た限りでは、C:\apache に展開するのがデフォルトのようです。
  2. 環境変数 OPENSSL_CONF の設定と、openssl.cnf のコピー。私は、Cygwin の OpenSSL からコピーしてしまいました。内容は関知していません。(とほほ) 環境変数は、Windows XP なので、コントロールパネルから設定します。
  3. httpd.conf と ssl.conf の編集(その1)。Unix の apachectl では apachectl startssl のようにしますが、これは apache.exe -DSSL -k start と等価です。この -DSSL により、


が効いてくるのですが、-DSSL を Windows のサービスで設定するのが面倒だったので、単純にこの 2行をコメントアウトしてしまいました。これで、常に SSL 有効で Apache が立ち上がることになります。

  1. httpd.conf と ssl.conf の編集(その2)。ssl.conf では、特に次の設定が重要です。
# ↓ 既に説明しました。
SSLPassPhraseDialog  exec:conf/passwd.bat
# ↓ Windows 版の Apache では、こうしないとまずいそうです。
SSLMutex  default

httpd.conf では、

LoadModule ssl_module modules/mod_ssl.so

を有効にする必要があります。

*1:レジストリを無理矢理書き換えれば使えるみたいだけど、あまり信用しないほうが良いでしょう。

*2:詳細は、http://d.hatena.ne.jp/ayokoyama/20050218#p4 あたりで追跡しようと思っています。