Server Name Indication

提供: セキュリティ
2018年11月1日 (木) 20:02時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク

Server Name Indication (SNI, サーバネーム インディケーション)とは、SSL/TLSの拡張仕様です。SSLのハンドシェイクを行うときに、クライアントは、アクセスするホスト名を通知し、サーバ側はホスト名によって、証明書を使い分けします。

読み方

Server Name Indication
さーばねーむ いんでぃけーしょん

概要

Server Name Indication(SNI)では、複数の証明書を使い分けることができます。

SNIでは、あとから証明書を追加することで、異なるドメイン名のHTTPSのウェブサイトを追加できます。

マルチドメインのウェブサーバ

これは、SNIの話ではありません。

HTTP では、名前ベースのバーチャルホストが利用可能です。

しかしながら、HTTPSの場合は、名前ベースのバーチャルホストを利用できません。TLSプロトコルのハンドシェイクは、アプリケーション層(HTTP)の通信の前に完了されます。TLSプロトコルの段階では、接続先のホスト名を知ることはできませんでした。HTTPヘッダのホストフィールドを見るまで、どのホスト名に対してアクセスしているかわかりません。

この問題を解決するために、HTTPSウェブサーバは、ホスト名ごとに異なるグローバルIPアドレスを利用していました。IPアドレスごとに証明書を設定します。それがIPベースのバーチャルホストになります。

複数ドメインをサポートするSSL証明書

複数のホスト名(ドメイン)をサポートする方法として

  • ワイルドカード証明書
  • SANs(Subject Alternative Names)

があります。 しかしながら、上記の方法は、証明書を発行するときに、未来に使うことになるドメインを予期して、入れておくことは事実上不可能です。

SNIを導入するとどうなるのか?

Server Name Indication(SNI)は、TLSのハンドシェイクを改良することにより、HTTPSウェブサーバでも複数の証明書が利用可能になります。

  1. クライアントは、TLSハンドシェイクの段階で、接続するドメイン名(ホスト名)を通知します。
    ドメイン名の通知は、平文の通信になります。
  2. サーバは、対応するドメイン名(ホスト名)の証明書を選択します。

つまり、1つのIPアドレスで複数のドメインのHTTPSのサーバが提供できます。

SNIの実装

SNI は、TLSの接続時の ClientHello の拡張で「接続したいドメイン」をサーバに伝えます。ClientHelloのSNIの情報をもとに、サーバは ServerHelloで適切な証明書をクライアントに渡すことができます。ただし、SNIの情報は暗号化されていません。

対応状況

2015年の時点では、たいていのソフトウェアは対応していると考えられます。かなり古いソフトウェアは、SNIに対応していません。

まとめ

  • 証明書を追加することで、異なるドメイン名のHTTPSのウェブサイトを後から追加できます。
  • グローバルIPアドレスが1つだけで、複数のHTTPSのウェブサイトを運営できます。

関連項目




スポンサーリンク