1191

TLS/SSL (HTTPS) 暗号化を使用する場合、すべての URL は暗号化されますか? TLS/SSL(HTTPS)を利用する際にURLのデータを全て非表示にしたいので教えて頂きたいです。

TLS/SSL が完全な URL 暗号化を提供する場合、URL から機密情報を隠すことについて心配する必要はありません。

4

14 に答える 14

1027

はい、SSL 接続は TCP レイヤーと HTTP レイヤーの間にあります。クライアントとサーバーは最初に (SSL/TLS プロトコルを介して) 暗号化された安全な TCP 接続を確立し、次にクライアントはその暗号化された TCP 接続を介して HTTP 要求 (GET、POST、DELETE...) を送信します。

于 2009-01-31T21:17:39.770 に答える
883

誰もワイヤ キャプチャを提供しなかったので、ここに 1 つ示します。
サーバー名(URL のドメイン部分) は、プレーン テキストClientHelloでパケットに表示されます。

以下は、次へのブラウザー要求を示しています。
https://i.stack.imgur.com/path/?some=parameters&go=here

ClientHello SNI 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.1HTTP リクエストで送信されます。


エグゼクティブサマリー

ドメイン名は平文で送信される場合がありますが (TLS ハンドシェイクで SNI 拡張が使用されている場合)、URL (パスとパラメーター) は常に暗号化されます。


2019年3月の更新

これを取り上げてくれたcarlin.scottに感謝します。

SNI 拡張機能のペイロードは、このドラフト RFC 提案を介して暗号化できるようになりました。この機能は TLS 1.3 にのみ存在し (オプションとして、それを実装するのは両端次第です)、TLS 1.2 以下との下位互換性はありません。

CloudFlare はそれを行っており、ここで内部の詳細を読むことができます — ニワトリが卵の前に来なければならない場合、ニワトリはどこに置きますか?

実際には、これは FQDN をプレーン テキストで送信する代わりに (Wireshark キャプチャが示すように)、暗号化されることを意味します。

注:これは、逆引き DNS ルックアップによって目的の宛先ホストが明らかになる場合があるため、セキュリティよりもプライバシーの側面に対処します。

2020年9月更新

SNI 部分だけでなく、Client Hello メッセージ全体を暗号化するためのドラフト RFC があります: https://datatracker.ietf.org/doc/draft-ietf-tls-esni/?include_text=1

執筆時点では、このブラウザのサポートは非​​常に限られています。

于 2016-08-02T18:26:34.653 に答える
173

回答がすでに指摘しているように、https「URL」は実際に暗号化されています。ただし、ドメイン名を解決するときの DNS 要求/応答はおそらくそうではありません。もちろん、ブラウザーを使用していた場合は、URL も記録される可能性があります。

于 2009-01-31T21:26:58.797 に答える
107

URL を含め、リクエストとレスポンス全体が暗号化されます。

HTTP プロキシを使用する場合、ターゲット サーバーのアドレス (ドメイン) は認識されますが、このサーバーで要求されたパスは認識されません (つまり、要求と応答は常に暗号化されます)。

于 2009-01-31T21:17:50.207 に答える
107

以前の回答に同意します:

明確にするために:

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 のログ ファイルからそれを取得できます。)

于 2013-07-28T06:49:31.473 に答える
53

はいといいえ。

サーバー アドレス部分は、接続の設定に使用されるため、暗号化されません。

これは、暗号化された SNI と DNS によって将来変更される可能性がありますが、2018 年現在、両方のテクノロジーは一般的に使用されていません。

パス、クエリ文字列などは暗号化されています。

GET リクエストの場合、ユーザーは引き続きロケーション バーから URL をカット アンド ペーストできます。また、画面を見ている人が見られるような機密情報をそこに配置したくない場合があります。

于 2009-01-31T21:20:09.343 に答える
49

Marc Novakowski からの役立つ回答への追加 - URL はサーバーのログ (例: /etc/httpd/logs/ssl_access_log) に保存されるため、サーバーに情報を長期間保持させたくない場合URL に含めないでください。

于 2010-11-02T14:03:18.083 に答える