web-dev-qa-db-ja.com

SNIホールとは何ですか?

本日以前、ローン学習者はgoogle.comに発行された証明書を提示しているにもかかわらず、google.netへのアクセス中に証明書エラーがないのはなぜですか?

受け入れられた回答 は、問題がSNIホールによって引き起こされたと説明しています。

「SNIホール」に陥りました。クライアントのTLSハンドシェイク部分に「サーバー名表示」がない場合、Googleは別の証明書を提示します。
- StackzOfZtuff

"SNIホールとは" の上位の検索結果は、の質問ページです WebサーバーでSNIホールを有効にすることのセキュリティ上の意味は何ですか?) ?、これはこの用語に慣れていない人にはあまり役に立ちません。

SNIホールとは正確には何ですか?

38
Stevoisiak

SNI( サーバー名表示 )は、クライアントがTLSハンドシェイク内でアクセスするターゲットのドメイン名をサーバーに提示するTLS(トランスポート層セキュリティ)拡張です。これは、同じIPアドレスに異なる証明書を持つ複数の仮想サーバーがあり、サーバーが正しい証明書を提示できる場合に使用されます。

これまでのところ、一致する仮想ホスト構成を選択するために使用されるHTTPリクエストのHTTPホストヘッダーに似ています-証明書は内部に送信されるため、証明書の選択にはホストヘッダーのみを使用できませんHTTPリクエスト。 (つまり、TLSハンドシェイクが既に行われた後)。

SNI TLS拡張はオプションであるため、一部のクライアントはこの拡張を送信しない場合があります。これは、openssl s_client引数なしの-servernameの場合ですが、さまざまなプログラミング言語の多くのTLSライブラリにも当てはまります。また、最近のすべてのブラウザはSNIを使用していますが、XP上のIE8のような古いブラウザは使用していません。

そのようなクライアントが複数の証明書を持つサーバーに接続する場合、サーバーはクライアントが実際に必要とする証明書を認識しません。つまり、クライアントはSNI拡張を使用しないことによって「SNIホール」に陥ります。この場合、サーバーは通常、エラーを返す(または、接続を閉じるだけの場合もあります)か、この目的のために明示的または暗黙的に構成されたデフォルトの証明書を使用します。

37
Steffen Ullrich

SNIホールとは、HTTPS接続を完了するためにSNIの存在を必要としないIPアドレス用にセットアップされたデフォルトサイトがある場合です。

これは、実際には、SNIが存在する前はall HTTPS接続が機能していた方法です。各HTTPSサイトには、ホスト名だけでなく、ルーティング可能なIPアドレスが必要でした。したがって、この方法で設定すると、仮想ホスト名を使用する多くのHTTP(ポート80)サイトがある場合でも、そのIPアドレスへのポート443要求はその1つのサイトに解決されます。これは、多くのサイトでWebサーバーを再利用し、1つのサイトにSSL/HTTPSを設定することを決定した人々にとって、長年にわたる問題でした。同じサーバーでhttp://example.comhttp://contoso.comを実行していて、example.comにHTTPSを設定した場合、http://contoso.comの結果は引き続き正しく機能しますが、https://contoso.comのリクエストは、https://example.comからの結果を返しますが、証明書エラーは発生します。

ここに表示されているものは、実質的に同じものです。接続しようとしているホスト名をGoogleのサーバーに通知するSNI拡張機能を送信しない場合、GoogleウェブサーバーのIPアドレスのデフォルトはgoogle.comサイトであるため、接続しようとしているホスト名に関係なく、応答するgoogle.comになります。

11
Xander

非SNIクライアントを使用して実際に複数のSSLドメインを持つSNIサーバーに接続しました。サーバーは推測を間違えました。

HTTP/1.0クライアントでHTTP/1.1サーバーに接続するときの基本的な話は同じです。サーバーが推測します。

1
Joshua