TLS/SSL (HTTPS) 暗号化を使用する場合、すべての URL は暗号化されますか? TLS/SSL(HTTPS)を利用する際にURLのデータを全て非表示にしたいので教えて頂きたいです。
TLS/SSL が完全な URL 暗号化を提供する場合、URL から機密情報を隠すことについて心配する必要はありません。
TLS/SSL (HTTPS) 暗号化を使用する場合、すべての URL は暗号化されますか? TLS/SSL(HTTPS)を利用する際にURLのデータを全て非表示にしたいので教えて頂きたいです。
TLS/SSL が完全な URL 暗号化を提供する場合、URL から機密情報を隠すことについて心配する必要はありません。
はい、SSL 接続は TCP レイヤーと HTTP レイヤーの間にあります。クライアントとサーバーは最初に (SSL/TLS プロトコルを介して) 暗号化された安全な TCP 接続を確立し、次にクライアントはその暗号化された TCP 接続を介して HTTP 要求 (GET、POST、DELETE...) を送信します。
誰もワイヤ キャプチャを提供しなかったので、ここに 1 つ示します。
サーバー名(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」の拡張子を含めることができます。
SNI 拡張が使用されている場合、FQDN (URL のドメイン部分)はパケット内で平文で送信される場合があります ( MAY )。ClientHello
URL の残りの部分 ( ) は、リクエスト URL が HTTP のもの (OSI レイヤー 7) であるため、/path/?some=parameters&go=here
内部に存在する必要はありません。したがって、TLS ハンドシェーク (レイヤー 4 または 5) で表示されることはありません。ClientHello
これは、セキュアなTLSチャネルが確立された後に、 GET /path/?some=parameters&go=here HTTP/1.1
HTTP リクエストで送信されます。
ドメイン名は平文で送信される場合がありますが (TLS ハンドシェイクで SNI 拡張が使用されている場合)、URL (パスとパラメーター) は常に暗号化されます。
これを取り上げてくれたcarlin.scottに感謝します。
SNI 拡張機能のペイロードは、このドラフト RFC 提案を介して暗号化できるようになりました。この機能は TLS 1.3 にのみ存在し (オプションとして、それを実装するのは両端次第です)、TLS 1.2 以下との下位互換性はありません。
CloudFlare はそれを行っており、ここで内部の詳細を読むことができます — ニワトリが卵の前に来なければならない場合、ニワトリはどこに置きますか?
実際には、これは FQDN をプレーン テキストで送信する代わりに (Wireshark キャプチャが示すように)、暗号化されることを意味します。
注:これは、逆引き DNS ルックアップによって目的の宛先ホストが明らかになる場合があるため、セキュリティよりもプライバシーの側面に対処します。
SNI 部分だけでなく、Client Hello メッセージ全体を暗号化するためのドラフト RFC があります: https://datatracker.ietf.org/doc/draft-ietf-tls-esni/?include_text=1
執筆時点では、このブラウザのサポートは非常に限られています。
URL を含め、リクエストとレスポンス全体が暗号化されます。
HTTP プロキシを使用する場合、ターゲット サーバーのアドレス (ドメイン) は認識されますが、このサーバーで要求されたパスは認識されません (つまり、要求と応答は常に暗号化されます)。
以前の回答に同意します:
明確にするために:
TLS を使用すると、URL の最初の部分 ( https://www.example.com/ ) は接続を確立するときに引き続き表示されます。2 番目の部分 (/herearemygetparameters/1/2/3/4) は TLS によって保護されています。
ただし、GET 要求にパラメーターを入れてはならない理由がいくつかあります。
まず、他の人がすでに述べたように: - ブラウザのアドレスバーからの漏えい - 履歴からの漏えい
さらに、http リファラーを介した URL の漏えいがあります。ユーザーはサイト A を TLS で表示し、サイト B へのリンクをクリックします。両方のサイトが TLS である場合、サイト B へのリクエストにはサイト A からの完全な URL が含まれます。リクエストのリファラー パラメータ。また、サイト B の管理者は、サーバー B のログ ファイルからそれを取得できます。)
はいといいえ。
これは、暗号化された SNI と DNS によって将来変更される可能性がありますが、2018 年現在、両方のテクノロジーは一般的に使用されていません。
GET リクエストの場合、ユーザーは引き続きロケーション バーから URL をカット アンド ペーストできます。また、画面を見ている人が見られるような機密情報をそこに配置したくない場合があります。
Marc Novakowski からの役立つ回答への追加 - URL はサーバーのログ (例: /etc/httpd/logs/ssl_access_log) に保存されるため、サーバーに情報を長期間保持させたくない場合URL に含めないでください。