IIS8でSNIを設定する方法-びっくりするほど簡単

SNIが利用できると1つのIPアドレスで複数のSSL/TLSサイトが取り扱えるので非常に便利です。

以前はブラウザを含むクライアント側の対応を気にする必要がありましたが、最近のブラウザはSNIに対応しているので、気にする必要がほぼありません。

また、スマートフォンもSNIに対応しているので、モバイル系もあまり気にしなくてすむようになってきているので、積極的に活用したいところです。
※ガラケーは対応していないので、注意が必要です。

MicrosoftのIIS8であれば簡単にSNIの設定ができるので、めちゃめちゃ便利ですよ。

Ads by Google

IIS8でSNIを設定する方法-びっくりするほど簡単

SNIとは?

そもそもSNI(Server Name Indication)とは、「1台のサーバで異なる証明書」が扱える機能です。

現在はバーチャルホストを使って1台のサーバで複数のサイトを運用すること自体は当たり前な感じですが、SSL/TLSに関しては複数の証明書を取り扱うことが出来なかったんですね。

httpとしては1台のサーバで複数のサイトを構築はできるのですが、ことSSL/TLSのhttpsとなると、IPアドレスをサイトごとに持たせたり、ポート番号を変えたりしなければ実現できなかったわけです。

それがSSL/TLSの拡張仕様のSNI(Server Name Indication)により解決できるようになりました。

でも、まずサーバが対応していないとこの機能は使うことができません。

また、クライアント側も対応していないとだめなのですが、昨今のブラウザ、スマートフォンは対応しているので、環境としては整ってきています。

ガラケーについては対応していませんが、そこを考慮する必要が無ければかなり自由度が増したということになります。

バーチャルホストで、複数サイトのSSL/TLSができない理由

バーチャルホストですが、1つのグローバルIPアドレスがあれば、複数のサイトを運用できるのですが、具体的な流れとしては

  • クライアントからリクエストする際のホストヘッダーにアクセスしたいFQDNの情報を含めて送る
  • Requestを受け取ったサーバがホストヘッダ内のFQDNの情報を見て指定されたFQDNのコンテンツをレスポンスとして返す

という流れになります。

ただ、httpsの場合は、先にSSL/TLSのハンドシェイクが行われた後に、httpの通信が行われるわけで、ここで使われるサーバ証明書はグローバルIPアドレスに紐づいているサーバ証明書(あまり適切な表現では無いですが)が全てのリクエストに対して返されてしまいます。

よって、同一グローバルIPアドレスで複数のサイトを運用している場合は、代表のサーバ証明書が提示されてしまうため、その時点でコモンネームの不一致によるSSL/TLSの接続エラーが出てしまうというメカニズムです。

これをクリアにしてくれるのが、SNIです。

SNIを有効にするとSSL/TLSハンドシェイクの時点で、通信先のFQDNを通知することになります。

このリクエストを受け取ったサーバ側は、適切な証明書をクライアントに送ることができるので、コモンネーム不一致のエラーが出ることもないわけです。

IIS8での設定方法

IIS8でのSNIの設定ですが、本当に簡単で拍子抜けしてしまうくらいです。

まずは、最初のサイトの設定を行います。これは通常通りの設定方法でOKです。

そして、2つ目のサイトの設定です。ここからがSNIの出番ですね。

まずはサーバ証明書をインストールして、[サイト バインドの追加] ウィンドウに必要情報を入力します。

ここで最初の証明書と違う点は、

[サーバー名表示を要求する]にチェックを入れることです。

それだけです。

一応、

  • [ホスト名]
  • [SSL証明書]

の指定のところで他のサイトと重複したり、かみ合っていないことが無いかだけ気を付けてください。

サイトバインドの編集画面での設定項目

一応サイトバインドの編集画面の項目説明です。

  • 種類: https を選択
  • IPアドレス: サーバーで利用できるIPアドレスのリストが表示されます。
    このホストのIPアドレスまたは「未使用のIPアドレスすべて」を選択します。
  • ポート:通常は443
  • ホスト名: Web サーバーのホスト名(FQDN)を入力
  • サーバー名表示を要求する:チェックを入れる
  • SSL証明書:FQDNと一致した証明書を選択

SNIに対応しているブラウザとサーバの情報

最後にSNIに対応しているブラウザとサーバの情報です。これから出るものは基本的に対応していると考えて大丈夫だと思います。

PCブラウザ

Internet Explorer7以降
Chrome6以降
Mozilla Firefox 2.0 以降
Opera 8以降

※Windows XPのIEはどのバージョンでも対応していません。

スマートフォン

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

参考にしたサイト

https://ja.wikipedia.org/wiki/Server_Name_Indication

https://jp.globalsign.com/blog/2015/server_name_indication.htm

最新のIT関連情報を入手するならキーマンズネット

最新のIT関連情報を入手するならキーマンズネット無料会員登録


保存

Ads by Google

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

Ads by Google

コメントをどうぞ

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

CAPTCHA