※2010/10/30 若干修正しました。
ローカルテスト環境のApache2.2をSSL化(https)しようと思っていろいろ調べて導入してみました。
自分用のその備忘録です。検索 すると、OpenSSLのWin32バイナリを別途インストールする必要がある、みたいなことがいろんな解説サイトで見かけましたが、結果的に言うと、 ApacheにSSL通信をさせるだけのテスト目的なら必要ありませんでした。OpenSSL関係の必要なファイルはApache2のバイナリに含まれて います。
1. SSL付きのApache2.2バイナリをダウンロードしてインストール。
本 家(http://httpd.apache.org/)で配布されているWin32バイナリでもいいんですが、Apache Roungeで配布されているバイナリは最新のパッチや不具合修正が含まれており、コンパイラもVisualC++ 2008で性能も良いようです。本家のものは確かVisualC++ 6で古かったはず?
まずは Apache2 をポート80番でリクエストを処理できるようにセットアップしておく。正常に動作することが確認できたら、Apache2 サービスを停止させておく。
2. binディレクトリにある、openssl.exe を使ってSSL通信に必要な、サーバー証明書などを作成する。
証 明書ファイルなどを置く位置はどこでもいいんですが、conf/extra/httpd-ssl.conf に記述されている内容に従って confディレクトリに置く方が手間もかからない。というわけで、コマンドコンソールを立ち上げ、カレントディレクトリをconfディレクトリにする。
意味は知らなくても大丈夫(^^;; 次のようにコマンドを打つ。ただし、環境変数PATHにbinディレクトリを追加しておく。
(Apache2をインストールしたディレクトリ(ServerRoot)をC:Apache2にした場合の例)
>>cd /D C:\Apache2\conf set PATH = %PATH%;C:\Apache2\bin
準備終了。
2-1 秘密鍵を作成
>>openssl genrsa -rand charset.conv -out server.key 1024 rem charset.confはどんなファイルを指定しても可。乱数などを発生させるため種? rem (-rand charset.conv はなくてもいいです。)
2-2 署名要求を作成
>>openssl req -new -key server.key -out server.csr -config ..openssl.cnf Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Hyogo (県名・・・どこでも) Locality Name (eg, city) []:Kobe (・・・どこでも) Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyHome (・・・ご自由に) Organizational Unit Name (eg, section) []:MyRoom (・・・ご自由に) Common Name (eg, YOUR name) []:localhost_ssl (ブラウザからアクセスする名前。IPアドレスでアクセスする場合はそのIPアドレスを入力する。) Email Address []:test@localhost (・・・適当に) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: (必要なし。enterキー) </span>An optional company name []:(これも必要なし。enterキー)
2-3 サーバー証明書を作成
上記で作成した、秘密鍵と署名要求を使ってサーバー証明書を作成します。
>>openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
-days 3650 はお察しのとおり、10年という意味。何でも好きなだけ。
これで、server.key(秘密鍵)/server.crt(証明書)が生成されているはずです。
3. httpd.confとextra/httpd-ssl.confを修正する。
SSLモジュールを有効にするため、httpd.conf内の
LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
の二つの部分をコメントアウトする。
また、extra/httpd-ssl.conf の VirtualHostディレクティブのところで・・・
ローカル環境に合わせて、<VirtualHost 127.0.0.1:443>にする。
また、ServerName の部分を先ほどのコマンドラインで、サーバー名を入力したものと同じものを入れておく。
SSLCertificateFile server.crt SSLCertificateKeyFile server.key
にはそれぞれ、先ほど作成した、server.crt,server.keyのパスを入れる。
(この設定に合わすため、confディレクトリに作成したので、修正する必要はないと思うけど)
4. Apache2サービスのレジストリを修正
レジストリで以下のキーを開く。(サービス名がApache2の場合)
HKEY_LOCAL_MACHINE\SYSTEM\urrent\ControlSet\Services\Apache2
その中のImagePathの値を以下のように、”-D SSL”を追加する。
>>C:\apache2\bin\httpd.exe" -D SSL -k runservice
以上で、終わり。Apache2サービスを開始。netstat /a で確認すると、ポート80番(http)と443番(https)でListen状態になっているはず。
普 通にブラウザでhttps://でアクセスすると、SSL関係のエラー(セキュリティーアラート)が表示されるとおもいます。まぁ言うなれば、自分で発行 した「オレオレ証明書」を普通に通してくれるはずがない(笑)あくまでテスト環境なので、警告を無視してそのままアクセスできる。。。。
が、 IEでは問題ないんだけど、FireFox 3では、ちょっと仕様が変わったのか、どうしてもアクセスできないことがある。WindowsXP上で確認すると、セキュリティーアラートが表示されるも 例外の追加で、アクセスできる。しかし、WindowsVista ではどうしてもエラー画面で「例外の追加」ボタンが表示されない。
ツール>>設定>>詳細>>証明書を表示(証明書マネージャ)>>サーバー証明書 タブで例外を追加するも、エラーで追加できず・・・。
単にOSの機能の違いなのか・・・ちょっと原因不明。。。とりあえずテストできればいいのでまぁ・・・いいか。
5. 追記
アクセス時にSSLのセキュリティー警告をなくしたい場合は、ブラウザで表示される証明書をエクスポートし、証明書ストアへインポートすれば警告はなくなります。
なかがわさん、このページすごく役に立ちました。
ありがとうございます。
> ろん さん、
お役に立てて良かったです(^^
この記事にめちゃくちゃ助けられました。
本当にありがとうございます。
>もりさん、
そういっていただけると、こちらも嬉しいです(^^
おかげさまで設定する事ができました 。
ありがとうございました。