[Apache] SNIの落とし穴

雑談ばっかり書いていたらしゃちょーに怒られてしまうー
というわけで、ちょっとまじめな話も。今日はSNIのお話。

Server Name Indication(SNI)というのはSSL通信の拡張規格です。
2004年頃に開発が始まりそろそろ10年、ようやく普及してきました。

WebサーバーにはNameVirtualHostという、1IPでも複数のドメイン(FQDN)を扱うことができる機能があるのですが、
SSL通信ではWebサーバーがアクセスドメイン名を知る前に証明書を返さないといけないため、全然異なる証明書を返してしまい検証エラー……となってしまい、
そのためワイルドカード証明書を用いる等の工夫をしない限りSSLではNameVirtualHostは使えません
独自のドメインでSSLを利用するにはIPアドレスが1つ必要になるので、SSLはちょっと敷居の高いサービスになっていました。

それを解消するため、SNIではクライアントがサーバーに接続するとき(サーバーがSSL証明書を返す前)に
アクセスするドメイン名をサーバーに伝えます。
サーバーは伝えられたドメイン名に対応するSSL証明書を返し、クライアントはそれを検証してOK…という流れです。
この機能を使えばSSLでもNameVirtualHostが使えるようになります。

SNIを使うためには、クライアント(ブラウザ)とサーバー(Apache)の両方が対応していないといけません。
2013年現在、Apacheのほうは問題ありません。では対応するブラウザは……

Windows XP
Internet Explorer が対応しない
Mozilla Firefox 2.0 以降か、Google Chrome 6以降なら対応
Windows Vista 以降
Internet Explorer 7以降、Mozilla Firefox 2.0 以降、Google Chromeが対応
Mac OS X 10.5.6 以降
Safari 3.0 以降が対応
iPhone / iPod touch
iOS 4.0以降のSafariが対応
Android
Android 3.0 以降のAndroidブラウザが対応
非標準のブラウザについては不明

なんとWindowsXP上のIEでは対応しませんが、WindowsXP自体が2014年3月にマイクロソフトのサポートが切れるので、
そこがOSの寿命であり今後のサポートは不要と考えていいでしょう。
それ以降はSNIの利用価値が上がり、サーバー業者でのサービス導入が進むなど普及していくのではないでしょうか。

……そんなふうに考えていた時期が俺にもありました。

iPhone3Gとか、古いAndroid端末とか、非対応のスマホ端末がまだ結構あるのです。
これらは電話機でもあるので、人によってはなかなか買い換えてくれない場合があります。

そのうえ、ある種のWebサービスはHTTPアクセスすることもあり、その中にはSNIに非対応のものもあります。
ちゃんと確認していないけどたとえば、検索エンジンのクローラーとかどうなんでしょうね?
SSLのページがいつのまにか検索エンジンに載らなくなった、とかなったら泣きを見ます。
実を言えばわたしはこれで仕事ちょっとハマリました。ヤラレチャッタ、って思いましたねー。うわー。

というわけで、一見便利なSNIですが、非対応の存在がまだまだぬぐえないので、気をつけて使いましょう、というお話でした。


投稿者:

さみどり

さみどり

パラファミリーの技術担当です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です