Apacheの設定を変更し、単一IPアドレス上で複数のSSLサイトを運用する
そのものずばりのタイトルで公開されていらっしゃる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 offDocumentRoot /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以降 |