チップス

Apacheの設定を変更し、単一IPアドレス上で複数のSSLサイトを運用する


apache-logoそのものずばりのタイトルで公開されていらっしゃるHPがあったのでリンクさせていただきます。

2009-10-26 の記事です。

Apacheの設定を変更し、単一IPアドレス上で複数のSSLサイトを運用する

SNI( Server Name Indication )というSSLプロトコルに対する拡張機能がサポートされている。ただし Apacheのバージョンが 2.2.12以降。

必要条件
* Apacheのバージョンは2.2.12以降でなければならない。
* また、OpenSSLのバージョンは0.9.8f以降でなければならず、TLS拡張オプションを指定した状態でビルドされていなければならない。
* さらに、ApacheはOpenSSLの上記のバージョンを用いてビルドされていなければならない。ApacheはOpenSSLの適切なバージョン(TLS拡張サポートを含んだバージョンのOpenSSL)を検出すると、SNIのサポートを有効化するようになっている。

Apacheの設定ファイルにおける設定例


Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off

DocumentRoot /srv/www/example1.com/
ServerName www.example1.com
...



DocumentRoot /srv/www/example2.com/
ServerName www.example2.com
...

SSLStrictSNIVHostCheck off はSNI未対応ブラウザの挙動を制御する設定となりoffであればDefault Virtual Hostへリダイレクトされることを意味する。onであれば、接続自体を拒否する。

上記の例では、ポート443でApacheを待機(listen)させ、すべてのIPアドレスに対する仮想ホストリクエストを取り扱うよう設定している。新たなキーワードである「SSLStrictSNIVHostCheck」を無効化しているため、クライアントがSNIをサポートしていない場合でも403エラーが発生することはない。そういったリクエストは、先に定義されているSSLサイト(上記の例ではexample1.com)にリダイレクトされることになる。つまり、デフォルトとなるサイトを先に定義しておく必要があるわけだ。

注意点
SNIはすべてのブラウザがサポートしているわけではない。
「SNI対応ブラウザ」で確認すること。 <- 自分。 ApacheのSNIについて

ブラウザ バージョン、その他
FireFox 2.0以降
Opera 8.0以降
IE 7以降、Vista以降 XPはダメ
Chorome 6.??以降
Safari 3.2.1以降、MaxOSX 10.5.6以降

ApacheのSNIについてより。


   チップス