HTTPS URLは暗号化されていますか?


1020

TLS / SSL(HTTPS)暗号化を使用する場合、すべてのURLが暗号化されますか?TLS / SSL(HTTPS)を使用するときにすべてのURLデータを非表示にしたいので、知りたいのですが。

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


76
いずれにしても、機密データをURLに入れることはおそらくお勧めできません。ブラウザのアドレスにも表示されますので、お気に召しませんか?画面をちらっと見た人に自分のパスワードが表示されれば、人々はそれを気に入らない。機密データをURLに入れる必要があると思うのはなぜですか?
jalf

43
URLはブラウザの履歴とサーバーログにも保存されます。自分の名前とパスワードをどこかに保存したい場合、これらの2つの場所にはありません。
Piskvorが

47
たとえば、にアクセスするとしhttps://somewhere_i_trust/ways_to_protest_against_the_government/ます。次に、URLには機密データ、つまり政府に対する抗議を検討しているという提案が含まれています。
スティーブジェソップ2011

42
ネイティブ(ブラウザーベースではない)アプリからHTTPリクエストを行うときに、私はこの質問をしていました。これはモバイルアプリ開発者の興味を引くかもしれないと思います。この場合、上記のコメントは(真実ではありますが)無関係であり(URLが表示されず、閲覧履歴もありません)、答えはわかりやすくなっています。「はい、暗号化されています」。
DannyA

23
HTTPSになったら、どこに行くのか誰も分からないと思う人は、まずこれを読んでくださいサーバーのホスト名(例:example.com)SNIのためにリークされます。これはDNSとはまったく関係がなく、DNSを使用しない場合や暗号化されたDNSを使用する場合でもリークが発生します。
Pacerier 2015年

回答:


913

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


98
質問自体のコメントで@Jalfが言及していることに注目する価値があります。URLデータはブラウザの履歴にも保存されるため、長期間安全ではない可能性があります。
マイケルエクストランド

20
GETやPOSTだけではありません。DELETE、PUT、HEAD、またはTRACEも使用できます。

4
はい、それはブラウザの履歴のセキュリティ問題である可能性があります。しかし、私の場合、私はブラウザーを使用していません(元の投稿でもブラウザーに言及していませんでした)。ネイティブアプリのバックグラウンドでカスタムhttps呼び出しを使用する。これは、アプリのサーバー接続が安全であることを確認するためのシンプルなソリューションです。
ジングルディングル2013年

28
ただし、URLのDNS解決はおそらく暗号化されていないことに注意してください。そのため、トラフィックを盗聴している誰かが、アクセスしようとしているドメインをまだ見ている可能性があります。
ChewToy 2013年

21
SNIは、URLのSSL暗号化の「ホスト」部分を破壊します。これは自分でwiresharkでテストできます。SNIのセレクターがあります。または、リモートホストに接続するときにSSLパケットを確認することもできます。
cmouse 2014

654

誰もワイヤキャプチャを提供しなかったので、こちらをご覧ください。
サーバー名(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」の拡張を含めることができます(MAY)。


要するに:

  • FQDN(URLのドメイン部分は)MAY送信することが明らかに内部のClientHelloSNI拡張機能が使用されている場合、パケット

  • リクエスト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の逆引きにより、意図した宛先ホストが明らかになる可能性があるため、セキュリティよりもプライバシーの側面に対処します。


37
完全な回答、AからZまでの完全な説明。エグゼクティブサマリーが大好きです。@evilSnobu
oscaroscarを作成しました

4
完璧な答え、賛成投票!ブラウザの履歴がリークしている可能性があるため、クライアント部分についても考慮してください。ただし、トランスポート層に関しては、URLパラメータは暗号化されています。
Jens Kreidler、2018年

2
TLS 1.3がSNI拡張を暗号化し、最大のCDNがそれを実行しているという事実でこの回答を更新したい場合があります:blog.cloudflare.com/encrypted-sni もちろん、パケットスニファは、接続しているIPアドレス。
carlin.scott

@evilSnobuが、ユーザ名:パスワードの部分のユーザ名:password@domain.comが暗号化されて、右?したがって、httpsを使用してURLで機密データを渡すことは安全です。
Maksim Shamihulau

1
それらはネットワーク上で(トランスポートで)暗号化されますが、いずれかのエンド(ユーザーまたはサーバー)がURLをプレーンテキストファイルに記録し、資格情報をサニタイズしない場合...これは別の会話です。
evilSnobu

159

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


21
また、完全に無関係なサイトが特定のURLが履歴にあるかどうかをテストできるようにするJavaScriptハッキングがあるため、URLの記録は重要です。長いランダムな文字列を含めることで、URLを推測しにくくすることができますが、パブリックURLの場合、攻撃者はそのURLがアクセスされたことを知ることができ、短いシークレットがある場合、攻撃者はそれを総当たりすることができます適度な速度で。
Steve Jessop、2011

8
@SteveJessop、「完全に無関係なサイトが特定のURLが履歴にあるかどうかをテストできるようにするJavascriptハッキング」
Pacerier

6
@Pacerier:もちろんハッキングの日付ですが、当時私が話していたのは、stackoverflow.com / questions / 2394890 /…のようなものでした。これらの問題が調査され、攻撃が洗練されたのは2010年に大きな問題でしたが、現時点では実際には追跡していません。
スティーブジェソップ2014年

2
@Pacerier:その他の例:webdevwonders.com/…、webdevwonders.com /
Steve Jessop

1
暗号化されたDNSサービスでOpenDNSを使用できます。Macで使用していますが、Windowsのバージョンが正しく機能していません。それは少し前のことだったので、今はうまくいくかもしれません。Linuxではまだ何もありません。opendns.com/about/innovations/dnscrypt
SPRBRN

101

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

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


1
リクエスト全体。ホスト名は平文で送信されます。他のすべては暗号化されます。
Sam Sirry

98

私は以前の答えに同意します:

明確にするために:

TLSを使用すると、URLの最初の部分(https://www.example.com/)は、接続を確立するときに引き続き表示されます。2番目の部分(/ herearemygetparameters / 1/2/3/4)はTLSで保護されています。

ただし、GETリクエストにパラメータを含めない理由はいくつかあります。

まず、すでに他の人が述べたように:-ブラウザのアドレスバーからの漏洩-履歴からの漏洩

それに加えて、httpリファラーを介したURLの漏洩があります。TLSでサイトAが表示され、サイトBへのリンクをクリックします。両方のサイトがTLSにある場合、サイトBへのリクエストには、サイトAからの完全なURLが含まれます。リクエストのリファラーパラメータ。また、サイトBの管理者は、サーバーBのログファイルからそれを取得できます。


3
@EJPあなたはトバイアスが言っていることを理解していませんでした。サイトAのリンクをクリックしてサイトBに移動すると、サイトBは参照URLを取得すると彼は言っています。たとえば、siteA.com?u = username&pw = 123123を使用している場合、siteB.com(siteA.comのページにリンクされています)は「siteA.com?u=username&pw=123123」を参照として受け取りますブラウザによってHTTPS内でsiteB.comに送信されるURL。これが本当なら、それは非常に悪いです。これは本当のトビアスですか?
trusktr 2014年

9
@EJP、すべての最新のWebブラウザーが使用するSNIにより、ドメインが表示されます。また、EFFからこの図を参照して、訪問しているサイトのドメインを誰でも見ることができることを示してください。これはブラウザの可視性についてではありません。それは盗聴者に見えるものについてです。
14

10
@trusktr:ブラウザはHTTPSページからリファラーヘッダーを送信しないでください。これはHTTP仕様の一部です
Martin Geisler、2015

8
@MartinGeisler、キーワードは「すべき」です。ブラウザーは(「必須」ではなく)「すべき」をあまり気にしません。あなた自身のリンクから:「ユーザーがリファラーフィールドを送信するかどうかをユーザーが選択できるようにすることを強くお勧めします。たとえば、ブラウザークライアントには、オープン/匿名で閲覧するためのトグルスイッチがあり、それぞれの送信を有効 /無効にすることができます。リファラーとFrom情報」。Ops、これはまさにChromeが行ったことです。シークレットモードであっても、Chromeはリファラーをリークします
Pacerier 2015年

48

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


34

はいといいえ。

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

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

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

GETリクエストについては、ユーザーは引き続きロケーションバーからURLを切り取って貼り付けることができます。また、画面を見ている人に見られる可能性のある機密情報をそこに配置したくない場合もあります。


8
これを+1したいのですが、「はい」と「いいえ」の誤解を招くので、暗号化なしでDNSを使用してサーバー名が解決されることを指摘するだけに変更してください。
Lawrence Dol、

7
私の理解では、OPは正しい意味でURLという単語を使用しています。この回答は、URLのホスト名とDNS解決のホスト名を明確に区別しないため、より誤解を招くと思います。
Guillaume

4
URLは暗号化されています。HTTPトランザクションのすべての側面が暗号化されます。「その他すべて」だけではありません。限目。-1。
ローンの侯爵2013年

4
@EJPですが、DNSルックアップ、URLのある時点の部分を使用するため、技術者以外の人にとっては、URL全体が暗号化されません。Google.comを使用して非技術的なものを検索しているだけの非技術者は、データが最終的にどこにあるのか、どのように処理されるのかを知りません。ユーザーがアクセスしているURLの一部であるドメインは100%暗号化されていません。これは、攻撃者として私が彼がアクセスしているサイトを盗聴できるためです。URLの/ pathのみが、素人に本質的に暗号化されます(方法は関係ありません)。
trusktr 2014年

6
@ EJP、@ trusktr、@ Lawrence、@ Guillaume 皆が間違っています。これはDNSとは関係ありません。SNIは「TLSネゴシエーションの一部として仮想ドメインの名前を送信するため、 DNSを使用していない場合やDNSが暗号化されている場合でも、スニファはリクエストのホスト名表示できます。
Pacerier 2015年

9

トラフィックを監視しているサードパーティも、トラフィックを調べて、他のユーザーがサイトにアクセスしたときのトラフィックと比較することで、アクセスしたページを特定できる場合があります。たとえば、サイトに2ページしかなく、一方が他方よりもはるかに大きい場合、データ転送のサイズを比較すると、どのページにアクセスしたかがわかります。これをサードパーティから隠す方法はいくつかありますが、それらは通常のサーバーまたはブラウザの動作ではありません。たとえば、SciRateのこのペーパー(https://scirate.com/arxiv/1403.0297)を参照してください

一般に、他の回答は正しいですが、実際にはこのペーパーでは、アクセスしたページ(URL)を非常に効果的に特定できることを示しています。


これは実際には非常に小さなサイトでのみ実現可能であり、そのような場合、サイトのテーマ/トーン/性質はおそらく各ページでほぼ同じです。
Cameron

5
私が挙げた引用から、「医療、金融、法律サービス、ストリーミングビデオなどの分野で広く使用され、業界をリードする10のWebサイトのHTTPS展開にまたがる6000を超えるWebページに対するトラフィック分析攻撃を提示します。 89%の精度で同じウェブサイト[...]」実現可能性についてのあなたの結論は間違っているようです。
pbhj

2
この種の脆弱性について詳しく読むことに興味がある人にとって、これらのタイプの攻撃は一般にサイドチャネル攻撃と呼ばれます。
Dan Bechard、2016

7

完全なURLのプライバシーを常に信頼できるわけではありません。たとえば、エンタープライズネットワークの場合と同様に、会社のPCなどの提供されたデバイスは、追加の「信頼できる」ルート証明書で構成されているため、ブラウザーはhttpsトラフィックのプロキシ(中間者)検査を静かに信頼できます。 。つまり、完全なURLが検査のために公開されます。これは通常、ログに保存されます。

さらに、パスワードも公開され、おそらくログに記録されます。これがワンタイムパスワードを使用するもう1つの理由ですしたり、パスワードを頻繁に変更したりです。

最後に、要求と応答のコンテンツも、暗号化されていない場合は公開されます。

検査のセットアップの一例は、チェックポイントがここで説明しています。付属のパソコンを使った昔ながらの「インターネットカフェ」もこの方法で設置できます。


6

重複する質問に対する私の回答へのリンク。ブラウザの履歴で利用できるURLだけでなく、サーバー側のログだけでなく、サードパーティのコンテンツを使用する場合に、コントロールの外部のソースにURLを公開するHTTPリファラーヘッダーとしても送信されます。


これは問題ではありませんが、サードパーティコールを提供することもHTTPSです。
Liam

3
第三者の証明書で暗号化され、URLが見えるようになります
JoshBerke

5

現在は2019年で、TLS v1.3がリリースされました。Cloudflareによると、TLS v1.3のおかげでSNIを暗号化できます。だから、私は自分に素晴らしいと言いました!cloudflare.comのTCPパケット内でどのように見えるかを見てみましょう。そこで、ブラウザーとしてGoogle Chromeを使用し、パケットスニファーとしてWiresharkを使用して、cloudflareサーバーの応答から「クライアントハロー」ハンドシェイクパケットをキャッチしました。それでも、Client helloパケット内のサーバー名をプレーンテキストで読み取ることができます。

ここに画像の説明を入力してください

これはまだ匿名接続ではないので、何を読むことができるかに注意してください。クライアントとサーバー間のミドルウェアは、クライアントから要求されたすべてのドメインをログに記録できます。

したがって、SNIの暗号化にはTLSv1.3と連携するために追加の実装が必要であるように見えます

次の記事では、TLSv1.3の一部としてCloudflareによって提供されるSNIの暗号化について説明します。ただし、cloudflare.comからのすべてのHTTPs URLは、TLS v1.3でのTCPパケット内のプレーンテキストです。

[ https://blog.cloudflare.com/encrypted-sni/][3]


「SNI 暗号化できる」-それが重要なポイントです。現在のGoogle Chromeでcloudflare.com/ssl/encrypted-sniを確認すると、「このページにアクセスしても、ブラウザはSNIを暗号化していませんでした。」それはタンゴに2
つかかり

どうやら現在のFirefoxができる ESNIを行うが、それはデフォルトでは無効になっています:あなたは有効にする必要がありnetwork.security.esni.enabled、セットnetwork.trr.mode2の(現在のCloudFlareにごDOHリゾルバを設定する)、およびブラウザの再起動、(原文のまま!)を 次に、ESNIを使用します-ドメインのインフラストラクチャでサポートされている場合。詳細については、blog.mozilla.org / security / 2018/10/18 /…を参照してください。
Piskvorが

2

ここにはすでにいくつかの良い答えがありますが、それらのほとんどはブラウザのナビゲーションに焦点を当てています。私はこれを2018年に書いています。おそらく誰かがモバイルアプリのセキュリティについて知りたいと思っています。

モバイルアプリの場合、アプリケーションの両端(サーバーとアプリ)を制御すれば、HTTPS 使用している限り安全です。iOSまたはAndroidは証明書を検証し、起こりうるMiM攻撃を軽減します(これがすべての唯一の弱点になります)。トランスポート中に暗号化されるHTTPS接続を介して機密データを送信できます。アプリとサーバーだけがhttps経由で送信されたパラメータを認識します。

ここでの唯一の「たぶん」は、クライアントまたはサーバーが、データがhttpsにラップされる前にデータを参照できる悪意のあるソフトウェアに感染している場合です。しかし、誰かがこの種のソフトウェアに感染している場合、データの転送方法に関係なく、そのデータにアクセスできます。


1

さらに、ReSTful APIを構築している場合、クライアントがブラウザーではない可能性があり、リンクをクリックするユーザーがいない可能性があるため、ブラウザーのリークとhttpリファラーの問題はほとんど軽減されます。

この場合は、ベアラートークンを取得するためにoAuth2ログインをお勧めします。その場合、唯一の機密データは最初の資格情報になります...おそらくとにかく投稿リクエストにあるはずです


0

あなたはすでに非常に良い答えを持っていますが、私はこのウェブサイトの説明が本当に好きです:https : //https.cio.gov/faq/#what-information-does-https-protect

つまり、HTTPSを使用して非表示にします。

  • HTTPメソッド
  • クエリパラメータ
  • POST本文(存在する場合)
  • リクエストヘッダー(Cookieを含む)
  • ステータスコード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.