IISで、ホストヘッダーによるバーチャルドメインでSSLを使用するには?

ちょっと前にお客様からいただいた質問で以下のようなものがありました。

IIS7.0 で ホストヘッダーを使用したバーチャルドメインの運用を https で対応は可能か?
Windows 2003 までは未対応だったが、Windows 2008 R2 ではどうか?

はい。可能です。しかし、厳密にいうと仕組み上できません。

なにを言ってるんだ? と思われるかもしれませんが、この問題はそう単純ではありません。

バーチャルドメインと呼ばる、一つの IP アドレスで複数のホスト名のサービスを提供する方法として、HTTP 1.1 で使用されているのがホストヘッダーを利用するものです。

この方法では、Web サーバーは、クライアントからの HTTP リクエスト内の "Host:" フィールドに記載されているホスト名をもとに Web サイトを判定し、レスポンスを切り替えます。

しかし、HTTPS で通信を行う場合、Web サーバーは SSL 通信を開始するにあたり、まず 最初にサーバー証明書をクライアントへ送ります。

そのため、その後クライアントから送られる HTTP リクエスト中に、別のホスト名が書いてあったとしても、すで遅く、別のホスト名での証明書が発行されているため"証明書とホスト名が一致しない" という旨の警告がブラウザに表示されます。

このような動作につき、標準的な Web サーバーで、"ホストヘッダー だけ" を使用して HTTPS の バーチャルドメインの運用はできません。

しかし、現在においては、 RFC 3546 に記載されている、Transport Layer Security (TLS) Extensions という仕様を使用して(しゃれではありません:-) )、一つの IP アドレスで、SSL を使用した複数のホスト名のサービスを提供することができます。

ただし、この方法は、HTTP クライアントも  RFC 3564 に対応しているものを使用する必要があります。( ※と、いっても Internet Explorer なら 7 以降、FireFox なら 2 以降、GoogleChrome、Opera と最近のブラウザであれば対応しているのでほとんど問題ないと思いますが。)

RFC 3546 に準拠した HTTP クライアントは、SSL 接続時のネゴシエーションメッセージ (CLIENT HELLO) と同時に要求ホスト名もサーバーに送出します。

IIS ではこの Server Name Indication (SNI) 拡張を利用して、複数の HTTPS サイトをホストすることが可能です。

これは、なにも IIS7 からの新機能というわけではなくて、IIS6 からも可能でした。

IIS6 における上記設定の詳細と、具体的なコマンドラインの記述は以下のドキュメントをご参照ください。

Microsoft TechNet - 『SSL ホスト ヘッダーのサーバー バインドを構成する
https://technet.microsoft.com/ja-jp/library/cc756897(WS.10).aspx

さて、IIS7.x で同様の設定を行うには以下のようにします。(表示の関係で折りかえってますが、一行で記述します。)

appcmd set site /site.name:"サイトの識別子" /+bingings.[protocol='https',bindingInformation='*:443:ホストヘッダー]

※<ホスト ヘッダー> は、site2.contoso.com や site4.contoso.com など、Web サイトのホスト ヘッダーです。

なお、バインディングを解除するには、/+bindingsのプラス記号をマイナスマイナス記号で指定してください。

ただし、手元に複数サイトの証明書がないので試せてはいませんので、実際に使用する際には十分に検証を行い、正常に動作することを確認後に実装を行ってください。

あ、それから逆に、複数の Web サイトで、単純に同じ証明書を使用したい場合は、ワイルドカードサーバー証明書を使用すれば OK です。

詳しくは以下のドキュメントをご参照ください。

Microsoft TechNet - 『ワイルドカード サーバー証明書を取得およびインストールする
https://technet2.microsoft.com/WindowsServer/ja/library/b5999267-fc46-4430-a6af-e0b483886c8a1041.mspx?mfr=true

<参考>

Microsoft TechNet - 『SSL ホスト ヘッダーを構成する
https://technet.microsoft.com/ja-jp/library/cc738897(WS.10).aspx

ではまた。

Real Time Analytics

Clicky