Apache2.2 + OpenSSLでSSL化
apache_2.2.11-win32-x86-openssl-0.9.8i.msiをインストールして行いました。
http://httpd.apache.org/download.cgi
http://httpd.apache.org/download.cgi
コマンドラインからApacheのインストールしたディレクトリのbinフォルダに移動する。
cd C:\Program Files\Apache Software Foundation\Apache2.2\bin
私の場合は
cd C:\Apache Software Foundation\Apache2.2\binだったりスペースが入ってるのが嫌なので
cd C:\Apache2.2\binだったりしますが。
以下のコマンドでApacheのディレクトリのconfフォルダ内にサーバ用秘密鍵(server.key)、サーバ用公開鍵(server.csr)、サーバ用証明書(server.crt)、ブラウザ用証明書(server.der)を作成します。
サーバ用秘密鍵(server.key)
openssl genrsa -out ../conf/server.key 1024
サーバ用公開鍵(server.csr)
openssl req -new -key ../conf/server.key -out ../conf/server.csr -config ../conf/openssl.cnf
サーバ用証明書(server.crt)
openssl x509 -in ../conf/server.csr -out ../conf/server.crt -req -signkey ../conf/server.key -days 365
ブラウザ用証明書(server.der)
openssl x509 -in ../conf/server.crt -out ../conf/server.der -outform DER

※あくまでもApacheインストールディレクトリのconf直下に全てのファイルを置くとする(でないとconf/extra/httpd-ssl.confを編集する必要がある)
httpd.confを編集
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.confと#を外してコメントアウトし、SSLを有効にしようとしたところエラーになりました。
Apacheのエラーログを見たところ
[Wed Dec 16 19:01:34 2009] [notice] Parent: Received restart signal -- Restarting the server.
[Wed Dec 16 19:01:34 2009] [notice] Child 2044: Exit event signaled. Child process is ending.
(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
[Wed Dec 16 19:01:34 2009] [warn] (OS 995)スレッドの終了またはアプリケーションの要求によって、I/O 処理は中止されました。 : winnt_accept: Asynchronous AcceptEx failed.
[Wed Dec 16 19:01:35 2009] [notice] Child 2044: Released the start mutex
[Wed Dec 16 19:01:36 2009] [notice] Child 2044: All worker threads have exited.
[Wed Dec 16 19:01:36 2009] [notice] Child 2044: Child process is exiting
となっていて、inetinfo.exeがSSLで使用するポート443を使用していた為でした。
ちなみに-config ../conf/openssl.cnfのopenssl.cnfはWindowsXPだとopensslなどと表示されてるかも知れませんが、エディタで開くと実際にはopenssl.cnfとなっていて設定が記述してあります。
また鍵と証明書を作る段階で
WARNING: can't open config file: /usr/local/ssl/openssl.cnfなどと出ますが、新しいバージョンの2.2.14では出ません(この警告は出るものの2.2.11でもSSL化はできました)。



