dodaの日記: ウェブブラウザのSNI対応
かなり前の話だが、elderwandさんの日記経由、この記事で、最近のApacheはSNI(Server Name Indication)に対応している事を知った。
すぐに試したかったのだけれど、忙しかったり体調を崩したりなどしていたせいでなかなか試せず、最近になってやっと試せた。
SNIを使う為には、以下のバージョンのApache/OpenSSLが必要。
- Apacheのバージョンは2.2.12以降
- OpenSSLのバージョンは0.9.8f以降
使っていたApacheは2.2.13だったのだが、FreeBSD 7.2Rのベースシステムに含まれるOpenSSLは0.9.8eだったのでこっちがアウト。
という事で ports から security/openssl をインストール。
sue@nagato% sudo portinstall security/openssl
-略-
sue@nagato% /usr/local/bin/openssl version
OpenSSL 0.9.8l 5 Nov 2009
portsで入れたOpenSSLを使わせるため、Apacheも再インストール。
sue@nagato% sudo portupgrade -vvf apache-2.2.13
あ、2.2.14 になった。
設定は、普通に名前ベースのバーチャルホストを設定し、それぞれに対応する証明書を指定する。簡単。
Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off
<VirtualHost *:443>
DocumentRoot "/usr/local/www/data"
ServerName www.example.org
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/CERTS/www.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/CERTS/www.key
-略-
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/usr/local/www/squirrelmail"
ServerName mail.example.org
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/CERTS/mail.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/CERTS/mail.key
-略-
</VirtualHost>
注意点としては、SNIに対応していないブラウザからもアクセスできるように、SSLStrictSNIVHostCheck offを設定する事。
この場合、SNIに対応していないブラウザでアクセスすると、最初のバーチャルホストの証明書が使われる。
設定後Apacheを再起動し、SNIに対応しているOpera 10.10を使ってアクセスしてみると…成功。
wwwは通常のコンテンツが、mailではSquirrelMailのログインページが表示され、どちらも正しい証明書が送られてきた。
次に、アドエスのOpera Mobileからアクセスすると…こっちからはダメ。mailの方にアクセスしてもwwwの証明書が送られてくる。
気になったので、他でも色々確認してみた。
WindowsXP
対応
Opera 8.54
Opera 9.0
Opera 10.10
Firefox 3.5.5
非対応
Internet Eplorer 8
Safari 4.0.4
Google Chrome 3.0.195.38
FreeBSD
対応
Opera 10.10
Firefox 3.5.5
Lynx 2.8.7rel.1
非対応
Lynx 2.8.6rel.5
w3m 0.5.2
Windows 7
対応
Opera 10.10
Firefox 3.5.5
Internet Explorer 8
Safari 4.0.4
Google Chrome 3.0.195.38
Windows Mobile 6 (Advanced/W-ZERO3[es])
非対応
Opera Mobile 8.7
Internet Explorer Mobile
Wii
非対応
インターネットチャンネル
Playstation3
非対応
インターネットブラウザー
以下、気付いた点。
- IE8, Safari4, Chromeは、WindowsXPではダメだけどWindows7ではOK。多分、OSの機能を使っているんだろうな。証明書ストアも共通だし。
- Opera 8.54は最初うまくいかずに悩んだ。[設定] - [詳細設定] - [セキュリティ] - [セキュリティプロトコル]でTLS 1.1を有効にしたらOKになった。
- Firefoxが暗号にCamelliaを使ってるなあ。
- アドエスのOpera Mobile 8.7やWiiのインターネットチャンネル(Opera 9.3ベース)はダメなのか。対応していてもよさそうなんだけど。
ウェブブラウザのSNI対応 More ログイン