今回はIISでSNI(Server Name Indication)を設定する方法についての内容です
SNIが利用できると1つのIPアドレスで複数のSSL/TLSサイトが取り扱えるので非常に便利です。
以前はブラウザを含むクライアント側の対応を気にする必要がありましたが、最近のブラウザはSNIに対応しているので、気にする必要がほぼありません。
また、スマートフォンもSNIに対応しているので、モバイル系もあまり気にしなくてすむようになってきているので、積極的に活用したいところです。
※ガラケーは対応していないので、注意が必要です。
最近のサーバは簡単にSNIとSSLサーバ証明書の設定ができるので、めちゃめちゃ便利ですよ。
IISでSNIを簡単に設定する方法 | SSLサーバ証明書の設定もできる
SNI(Server Name Indication)とは?
そもそもSNI(Server Name Indication)とは、「1台のサーバで異なる証明書」が扱える機能です。
現在はバーチャルホストを使って1台のサーバで複数のサイトを運用すること自体は当たり前な感じですが、SSL/TLSに関しては複数の証明書を取り扱うことが出来なかったんですね。
httpとしては1台のサーバで複数のサイトを構築はできるのですが、ことSSL/TLSのhttpsとなると、IPアドレスをサイトごとに持たせたり、ポート番号を変えたりしなければ実現できなかったわけです。
それがSSL/TLSの拡張仕様のSNI(Server Name Indication)により解決できるようになりました。
SNI(Server Name Indication)はどのサーバでも使えるのか?
SNIを使うためには、まずサーバが対応していないと使うことができません。
また、クライアント側も対応していないとだめなのですが、昨今のブラウザ、スマートフォンは対応しているので、環境としては整ってきています。
ガラケーについては対応していませんが、そこを考慮する必要が無ければかなり自由度が増した(SNIが使えるようになった)ということになります。
どうしてバーチャルホストでは複数のSSLサーバ証明書を取り扱えなかったのでしょうか。
バーチャルホストで、複数サイトのSSL/TLSができない理由
バーチャルホストは、1つのグローバルIPアドレスで複数のサイトを運用するわけです。
その際のクライアントとサーバでの具体的な通信の流れとしては
- クライアントからリクエストする際のホストヘッダーにアクセスしたいFQDNの情報を含めて送る
- Requestを受け取ったサーバがホストヘッダ内のFQDNの情報を見て指定されたFQDNのコンテンツをレスポンスとして返す
という流れになります。
ただ、httpsの場合は、先にSSL/TLSのハンドシェイクが行われた後に、httpの通信が行われるわけで、ここで使われるサーバ証明書はグローバルIPアドレスに紐づいているサーバ証明書(あまり適切な表現では無いですが)が全てのリクエストに対して返されてしまいます。
要はドメイン毎により分けて証明書を送ることができないんです。
よって、同一グローバルIPアドレスで複数のサイトを運用している場合は、代表のサーバ証明書が提示されてしまうため、その時点でコモンネームの不一致によるSSL/TLSの接続エラーが出てしまうというメカニズムです。
これをクリアにしてくれるのが、SNIです。
SNIを有効にするとSSL/TLSハンドシェイクの時点で、通信先のFQDNを通知することになります。
このリクエストを受け取ったサーバ側は、適切な証明書をクライアントに送ることができるので、コモンネーム不一致のエラーが出ることがないわけです。
IIS8でのSNIの設定方法
それでは、SNIに対応しているIISのバージョン8でのSNIの設定方法をご紹介します。
IIS8でのSNIの設定は、本当に簡単で拍子抜けしてしまうくらいです。
まずは、最初のサイトの設定を行います。通常通りのSSLの設定方法でOKです。
そして、2つ目のサイトの設定です。ここからがSNIの出番ですね。
まずはサーバ証明書をインストールして、[サイト バインドの追加] ウィンドウに必要情報を入力します。
ここで最初の証明書と違う点は、
[サーバー名表示を要求する]にチェックを入れることです。
それだけです。
一応、
- [ホスト名]
- [SSL証明書]
の指定のところで他のサイトと重複したり、かみ合っていないことが無いかだけ気を付けてください。
IISのサイトバインドの編集画面での設定項目
サイトバインドの編集画面の項目を解説します。
- 種類: https を選択
- IPアドレス: サーバーで利用できるIPアドレスのリストが表示されます。
このホストのIPアドレスまたは「未使用のIPアドレスすべて」を選択します。 - ポート:通常は443
- ホスト名: Web サーバーのホスト名(FQDN)を入力
- サーバー名表示を要求する:チェックを入れる
- SSL証明書:FQDNと一致した証明書を選択
SNIに対応しているブラウザとサーバの情報
最後にSNIに対応しているブラウザとサーバの情報です。
これより新しいバージョンのものは、基本的に対応していると考えて大丈夫だと思います。
SNIに対応しているPCブラウザ
Internet Explorer7以降
Chrome6以降
Mozilla Firefox 2.0 以降
Opera 8以降
※Windows XPのIEはどのバージョンでも対応していません。
SNIに対応しているスマートフォン
Android デフォルトブラウザ
Honeycomb (v3.x) 以降
iOS 4以降
SNIに対応しているサーバ
Apache 2.2.12 以降 + mod_ssl もしくは mod_gnutls
Apache Traffic Server(英語版) 3.2.0 以降
Cherokee(英語版) (コンパイル時TLSサポートを有効にした場合)
lighttpd 1.4.24以降 (それ以前の1.4.xはパッチ)
Nginx と OpenSSL
F5ネットワークス Local Traffic Manager 11.1 およびそれ以降
Hiawtha(英語版) 8.6またはそれ以降
LiteSpeed 4.1 およびそれ以降
Pound 2.6 以降
Apache Tomcat (Java 7 およびそれ以降)
Microsoft IIS 8, 8.5
PageKite tunneling reverse proxy
Citrix NetScaler 9.3 以降
Radware Alteon ADC (AlteonOS 28.1 以降)
参考にしたサイト
以上、「IISでSNIを簡単に設定する方法 | SSLサーバ証明書の設定もできる」でした。
コメント