ApacheのSNIについて
SNIとはServer Name Indicationの略でSSLプロトコルの拡張機能。何が?というと名前ベースのSSLサイトが設定できるようになる。つまり、1IP上に複数のSSLサイトを構築できることになる。 今まではSSLサイトを作成するにあたり、必ず1IPを消費していた。
SNIではクライアントがサーバに対してサーバのホスト名を伝える事が定義されている。 今まではサーバからクライアントに対してSSL証明書のやり取りのために通信していた部分だ。
利用条件
- Apacheが2.2.12以降
- OpenSSLが0.9.8f以降でTLS拡張オプションを指定(configure enable-tlsext shared)
- Apacheが上記OpenSSLでビルド
- ブラウザがSNI対応
CentOS5標準リポジトリには条件に該当するパッケージは見当たらない。
自身で必要バージョンを入手して導入する必要がある。
CentOS6ではSNI対応バージョンが採用される(見通し)
何故ならばEnterpriseLinux6系は対応バージョンになっているからだ。
設定
Apacheの設定ファイルはざっくりと次のようになる
Listen 443 NameVirtualHost *:443 SSLStrictSNIVHostCheck off <VirtualHost *:443> DocumentRoot /srv/www/example1.com/ ServerName www.example1.com ... </VirtualHost> <VirtualHost *:443> DocumentRoot /srv/www/example2.com/ ServerName www.example2.com ... </VirtualHost>
ここで SSLStrictSNIVHostCheck off はSNI未対応ブラウザの挙動を制御する設定となりoffであればDefault Virtual Hostへリダイレクトされることを意味する。onであれば、接続自体を拒否する。
またDefault Virtual Hostにonが設定されている場合、IP/Portが同一の他の名前ベースのVirtual Host接続は拒否される。
SSLStrictSNIVHostCheck自身はServerディレクティブかVirtualHostディレクティブに設定可能。
ブラウザ対応状況
ブラウザの対応はほぼできてきてる感ありです。
注意点はブラウザは対応しているバージョンであるがOS側が対応していないって組み合わせがあること。
ブラウザ名 | バージョン、その他 |
---|---|
IE | 7以降、Vista以降 IE8でもXPはダメ |
FireFox | 2.0以降 |
Opera | 8.0以降 |
Opera Mobile | 10.1以降 Android版 |
Chorome | 6.??以降 XPでもOK、OS X 10.5.7以降はChrome 5.0.342.1以降 |
Safari | 2.1以降、MaxOSX 10.5.6以降、Vista以降 |
Mobile Safari | iOS 4.0以降 |
Windows Phone | 7以降 |