サイトに接続したことがないexample.com
。
このサイトがhttpsであり、https://example.com/supersecretpage
初めてサイトに接続したため、暗号鍵がまだ交換されていないため、URLはクリアテキストで送信されますか?そうでない場合、これはいつ行われますか?そのURLを入力するときの手順を誰かに説明してもらえますか?
短い答え:いいえ、URLは暗号化されますが、(サブ)ドメインはプレーンテキストで送信されます。あなたの場合、(パッシブ)攻撃者は知っています_example.com
_に接続しているが、アクセスしている特定のページがわからない。
要するに、攻撃者があなたがアクセスしているサイトに関する情報を入手できる場所が3回あります(時系列)。
しかし...
詳細については、以下の説明をお読みください。
注:「(サブ)ドメイン」と書いているときは、ドメイン(_example.com
_)とサブドメイン(_mydomain.example.com
_)の両方を意味します。私が「ドメイン」とだけ書くとき、私は本当にサブドメインなしのドメイン(_example.com
_)だけを意味します。
基本的に何が起こるかです:
example.com
_の証明書には、_www.example.com
_、_devserver.example.com
_、および_how-to-develop-tls.example
_も含まれる場合があります。これらのエントリは Subject Alternative Names と呼ばれ、証明書はそれらすべてに対して有効です。これがすべて発生した後、「通常の」HTTP要求が送信されます(保護されたTLSチャネルを介して)。これは、完全なURLが表示されるリクエスト全体で初めてのことです。リクエスト。このようになります:
GET/supersecretpage HTTP/1.1
ホスト:example.com
[...]
*証明書がワイルドカード証明書の場合、サブドメインは含まれず、_*.example.com
_のみが含まれます。
もう1つ言及する価値があります。接続を確立する前に、クライアントはDNS名を解決する必要があります。これを行うには、暗号化されていないDNSクエリをDNSサーバーに送信し、これらのクエリにも(sub)domain。これにより、攻撃者がアクセスしたドメインを確認するために使用できます。
ただしこれは、ユーザーがURLバーに_https://example.com/supersecretpage
_を手動で入力することを想定しているため、常にこのように行われる必要はありません。しかし、これはほとんどのユーザーにとって非常にまれです。むしろ_example.com/supersecretpage
_と入力します。別の問題は、訪問者が 安全でないHTTPSリンク とは対照的に、HTTPを使用する 安全でないリンク をクリックすることです。そのようなリンクは、例えば、サイトがHTTPSをサポートしていないか、デフォルトでHTTPSにリダイレクトしなかったときに作成された古いリンクである。なぜこれが重要なのかと尋ねますか?
このような(通常の)場合、URLに_https://
_はありません。プロトコルがURLバーに入力されていない場合、すべてのブラウザは内部的にこのURLを_http://example.com/supersecretpage
_に「変換」します(そこにhttp://があることに注意してください)サーバーがHTTPSをサポートすることを期待できないためです。これは、ブラウザーが最初に安全でないHTTPを使用してWebサイトへの接続を試み、WebサイトがHTTPSのURLに(301)リダイレクトを送信した後にのみ、安全なモードを使用することを意味します。
この場合、攻撃者は暗号化されていないHTTPリクエストで完全なURLを見ることができます。
ブラウザの「ネットワークパネル」を調べることで、これを自分で簡単にテストできます。そこで、この「HTTPSアップグレード」が表示されます。
ただし、この安全でない最初のHTTP要求を防ぐための手法があることに注意してください。最も注目すべきは [〜#〜] hsts [〜#〜] および-サイトへの最初の接続を保護するために HSTS preloading だけでなく HTTPS Everywherehelps このような攻撃に対して。 FYI:Netcraftによると すべてのHTTPSサーバーの95%が脆弱です 2016年3月の時点で、このような(SSLストリッピング)攻撃に対して脆弱でした。
いいえ、URLはクリアテキストで送信されません。
TCPスリーウェイハンドシェイクが完了した直後に、クライアントはサーバーとのTLSネゴシエーションを開始します。そのネゴシエーションが完了し、暗号化が行われた後にのみ、HTTP要求が送信されます。
Www.example.comのサイトにアクセスしたことがないので、ブラウザはドメイン名をIPアドレスに解決する必要があります。したがって、接続しようとしているサイトのドメイン名を含むDNS解決クエリを送信します。したがって、安全なDNSを使用しない限り、MITMは接続しようとしているドメインを見つけることができます。