SNI(Server Name Indication)とは?定義と使用方法
SNI(Server Name Indication)を使用すると、1つのIPアドレスで、それぞれに固有のTLS証明書を持つ複数のドメインを同時にホストできます。
まず、例を見てみましょう。
ホスティング大手のGoDaddyは、5,200万のドメイン名を保有しています。消費者はそれぞれにプライバシーを期待していますが、それらのドメインはすべて同じIPアドレスでホストされています。
これまで、GoDaddyのような企業は、消費者(とそのブラウザ)の不安を解消するために、包括的なセキュリティ証明書を作成したりしていました。この方法は必ずしも効果的ではありませんでした。サイトが読み込まれなかったり、接続前に「このサイトは安全ではありません」という恐ろしいメッセージが表示されたりしました。
SNIは、ブラウザとサーバーの接続方法を変えることで、この問題を解決します。
詳しく見てみましょう。
SNIで解決できる問題とは
多くのホスティング会社が、さまざまなドメイン名でWebサイトを提供していますが、それらのサイトはすべて同じIPアドレスでホストされています。このような環境では、あっという間に接続がもつれてしまいます。
デバイスは、Webサイトに接続するために次のようなハンドシェイクのプロセスを通過しなければなりません。
- 到達。ブラウザがホストサーバーを指名し、SSL証明書を要求します。SSL証明書は、認証のようにブラウザとサーバー間の接続が安全であることを保証する小さなファイルです。
- 交換。ブラウザとホストサーバーは、セキュリティのプロセスを強固にするために電子キーを交換します。
- 「CLIENT HELLO」メッセージ。ブラウザは、このコードを介して共有IP内の特定Webサイトを要求します。
- 接続。交信する準備ができました。
ブラウザがSSL証明書をリクエストした後、特定のIPアドレスをリクエストすることに注意してください。問題はそこです。
サーバーは、ブラウザがどのサイトを要求しているかを正確に把握していなければ、間違ったサイトを送信する可能性があります。そうなると、目当てのサイトのセキュリティ証明書ではなく、要求していないサイトの証明書を取得することになります。このような混乱が原因でアラートが発生します。あなたのWebサイトは、あるブロガーの表現を借りると、セキュリティ証明書の不備に関する警告で「人々を怖がらせる」ことになりかねません。
このような環境では、各Webサイトに1つずつIPアドレスを割り当てるほうが賢明に思えるでしょう。しかし残念ながら、すべてに行き渡るほど十分な数のIPアドレスはありません。
IPv4は、オンラインのトラフィックを管理する国際的な通信規格です。インターネット上の各デバイスに数字ラベルが割り当てられるため、すばやく接続できます。しかし、このシステムは1981年に開発されたもので、需要に追いついていません。
現在、非常に多くのデバイスがオンラインに対応しています。コンピューターやスマホだけでなく、玄関の呼び鈴や冷蔵庫、スピーカー、電子レンジも、いつでも接続できる状態ですが、一意なアドレスの数は限られています。
開発中の新しい標準であるIPv6が、この問題を解決するでしょう。しかし、準備がまだできていないため、今のところ、共有の方法を考えるしかありません。そして、SNIがそれを可能にします。
TLS SNI拡張機能の仕組み
SNIは、標準のアクセスプロトコルを逆さまにしたものと言えます。どのサイトが見たいかをサーバーに伝えるのではなく、先にリクエストしてしまうのです。
SNIはTLSプロトコルの拡張です。ブラウザは、ホストとハンドシェイクする際、セキュリティキーを交換する前に、リクエストするサイトのドメイン名を指定します。すぐに適切な証明書が送信されるので、ユーザーエクスペリエンスが低下するリスクが少なくなります。
SNIは安全か?
開発者は、ユーザーがアクセスしたいサイトに安全に接続できるよう、SNIの基本概念を設計しました。しかし残念ながら、この拡張機能にはセキュリティ上のリスクがあります。
SNIは完全には暗号化されていません。サイトをのぞき見している人には誰でも、あなたがアクセスしようとしているサイトが見えます。そして、その盗聴者が有能であれば、あなたが必要とするホスト名を、ハッカーが制御するホストに置き換えることができます。
開発者は、このリスクを軽減・排除するために、SNIを暗号化する回避策を使用しています。しかし今のところ、リスクは依然として存在しています。
SNIを使用できるのは誰か?
ほとんどの消費者には、ブラウザにこのテクノロジーを対応させる強制力がありません。コードに書かれているか、そのコードから除外されているかです。
SNIの実装は、そう簡単ではありません。組織で使っているシステムが、拡張機能を受け入れ、使用できなければなりません。さらに、訪問者も同じ条件を満たしたブラウザを使用していなければなりません。
中には、回避策を採用している企業もあります。そのような企業では、特定のオペレーティングシステムにのみSNIを実装し、他のオペレーティングシステムには実装していません。
SNIに対応しないブラウザを使っている訪問者は、デフォルトのハンドシェイクシステムを使用することになるため、間違った証明書を取得する可能性があります。ありがたいことに、このようなケースはまれです。ほとんどのブラウザはSNIシステムに対応しています。
もしレガシーシステムをご使用なら、安全性やセキュリティの維持がいかに難しいかをご存じでしょう。このトピックに関してまとめたホワイトペーパーがお役に立てるかもしれません。詳細については、こちらをご覧ください。
以上の内容は、原文(英語)の機械翻訳であり、原文と内容に差異がある場合は、原文が優先されます。
参考文献
How Go Daddy Keeps 52 Million Domains Running(2012年4月、Data Center Knowledge)
Solving the IP Address Shortage(2011年5月、Governing)
Is Your Website Scaring People?(Friends of Ministry)