がらくたネット


ApacheのSNIについて

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のwiki

設定

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以降