誰もワイヤキャプチャを提供しなかったので、こちらをご覧ください。
サーバー名(URLのドメイン部分)は、ClientHello
パケット内にプレーンテキストで表示されます。
以下は、ブラウザのリクエストを示しています。
https://i.stack.imgur.com/path/?some=parameters&go=here
TLSバージョンフィールドの詳細については、この回答を参照してください(3つあります-バージョンではなく、それぞれにバージョン番号が含まれているフィールドです!)
https://www.ietf.org/rfc/rfc3546.txtから:
3.1。サーバー名表示
[TLS]は、クライアントがサーバーに、接続しているサーバーの名前を通知するメカニズムを提供していません。 クライアントがこの情報を提供して、単一の基本的なネットワークアドレスで複数の「仮想」サーバーをホストするサーバーへの安全な接続を促進することが望ましい場合があります。
サーバー名を提供するために、クライアントは(拡張)クライアントhelloにタイプ「server_name」の拡張を含めることができます(MAY)。
要するに:
FQDN(URLのドメイン部分は)MAY送信することが明らかに内部のClientHello
SNI拡張機能が使用されている場合、パケット
リクエストURLはHTTPのもの(OSIレイヤー7)であるため、残りのURL(/path/?some=parameters&go=here
)は内部に存在しませんClientHello
。したがって、TLSハンドシェイク(レイヤー4または5)には表示されません。それは中に後で来るGET /path/?some=parameters&go=here HTTP/1.1
、HTTPリクエストAFTER 安全な TLSチャネルが確立されています。
エグゼクティブサマリー
ドメイン名は平文で送信できますが(TLSハンドシェイクでSNI拡張が使用されている場合)、URL(パスとパラメーター)は常に暗号化されます。
2019年3月更新
これを取り上げてくれて、carlin.scottに感謝します。
SNI拡張のペイロードは、このドラフトRFC提案によって暗号化できるようになりました。この機能はTLS 1.3にのみ存在し(オプションとして、実装するかどうかは両端にあります)、TLS 1.2以下との下位互換性はありません。
CloudFlareがそれを行っており、内部についての詳細はこちらで読むことができます—
鶏が卵の前に来る必要がある場合、鶏をどこに置きますか?
実際には、これはFQDNをプレーンテキストで送信する(Wiresharkキャプチャショーのように)代わりに、暗号化されることを意味します。
注:これは、DNSの逆引きにより、意図した宛先ホストが明らかになる可能性があるため、セキュリティよりもプライバシーの側面に対処します。