2011/09/05

apacheで複数のSSL設定を行う

1サーバーでSSL通信を複数のバーチャルホストで行う場合、設定がやや複雑(というか落とし穴いっぱい)だったのでメモを。
ちなみにバーチャルホストはサブドメインを設定しましたが、証明書はwwwでしか使えないものを購入(www以外のサブドメインは勝手証明書を利用)しました。




今回は、SSL関連の設定を3つのファイルに分けました。
ssl.conf・・・SSLの共通設定
ssl_www.conf・・・https://www.example.com 用の設定
ssl_test.conf・・・https://test.example.com 用の設定

apacheはconf.d以下に配置された「.conf」ファイルをhttpd.confにインクルードするので追加の設定は新たにファイルをこしらえたほうがすっきりします。

まず、ssl.confをコピーします。
cp ssl.conf ssl_www.conf
cp ssl.conf ssl_test.conf

ssl.confの設定
<virtualhost _default_:443>の項目をガッツリ削除。
ssl.confには、wwwとtestで使う共通設定のみ残します。

NameVirtualHost *:443 を追記する(どこでもいい。迷ったら一番最後)

次は、ssl_www.confとssl_test.confの設定。
ssl_www.confとssl_test.confからssl.confに残した部分を削除。
具体的には「<virtualhost _default_:443>」の中だけを残します。

以下の部分を修正
<virtualhost _default_:443>
↓
<virtualhost *:443>

「DocumentRoot」と「ServerName」の項目を有効にする。
DocumentRoot "/var/www/html" #環境に合わせて修正する
ServerName www.example.com:443 #環境に合わせて修正する

ssl_www.confとssl_test.confのログ出力先を調整(今回は出力先を分けたので。必要ない場合はとばしてください)

設定を確認。
apachectl configtest

syntax OK と表示されたら設定は完了。apacheリスタートします。

両方のSSL通信を確認する → できた\(^o^)/


今回は、既にwwwのサブドメインでSSL通信ができている状態からスタートしているので設定項目は少なめでした。ハマったのは「NameVirtualHost」の項目でしょうか。追記しないとconfigtestで「_default_ VirtualHost overlap on port 443, the first has precedence」というエラーを吐きます。
ssl.confに初期設定で残っている「<virtualhost _default_:443>」の項目が残っていても同じエラーを吐くので注意してください。

1つとりあえずSSL通信が使えるようにしてから2つ目の設定をする方向がいいかも知れませんね。

ネームベースのSSL設定は色々な曰くつきでできないという意見がチラホラ散見できたので、一つの成功例としてあげておきます。

see also:
[VB.NET]オレオレ証明書でSSL通信するための短絡的な解決法


0 件のコメント:

コメントを投稿