Webサーバーは、SSL復号化に使用するキーペアをどのように知るのですか?


18

Apacheは、リッスンしているTCPポート(80、443など)の1つへのリクエストを受信すると、HTTPヘッダーを見てリクエストされているホストを決定することを理解していますHost。サーバーは、リクエストをリダイレクトする仮想ホストを認識します。

しかし、HTTP over SSL / TLSではどのように機能しますか?HTTPリクエスト全体が暗号化されているため(少なくともそれはどこかで読んだと思います)、サーバーがデータを復号化した後にのみヘッダー情報を読み取ることができます。ただし、復号化するには、複数のSSL証明書をWebサーバーにインストールできるため、使用するキーペアを知る必要があります。

では、サーバーはどのように復号化に必要なキーを知るのでしょうか?


私の推測

TLSハンドシェイクが必要な情報を提供すると想像できます。


「可能性のある重複」フラグについて:

リンクされた質問と自分の質問の両方に対する答えは似ていることに同意しますが、質問は異なると言わなければなりません。独立したSSL証明書を使用して複数のサイトをホストできるかどうか、またはどのようにホストできるかは疑問の余地があります。代わりに、私の質問は根本的な技術的側面に対処します。




答えは非常に似いることに同意しますが、質問はまったく異なると思います。
パオロ

回答:


29

もともと、Webサーバーは知りませんでした。これが、サーバーでホストするすべてのSSL仮想ホストに個別のIPアドレスが必要な理由です。このように、サーバーは、接続がIP Xに着信したときに、関連付けられた仮想ホストの構成(証明書を含む)を使用する必要があることを知っていました。

これはServer Name Indicationで変更されました。これは、クライアントがハンドシェイクプロセスで必要なホスト名を示すことができるTLS拡張機能です。この拡張機能はすべての最新のOSで使用されていますが、古いブラウザーやサーバーではサポートされていないため、クライアントが引き続きWinXPでIE 6を使用することを期待する場合は、運が悪いでしょう。


2
それでも誰かがXPを使用している場合、とにかく私のサイトにアクセスする価値はありません;)
paolo

2
この方法でクライアントを制限する場合は、十分な注意が必要です(ブラウザは人ではありません)。多くの企業は、Windowsをあまりうまくアップグレードしていません。また、一部のAndroid携帯電話ベンダーの場合も同じです。通常、OSをまったくアップグレードしません(少なくともあまりアップグレードしません)。Windows XPは8%であり、Android 4.4以前の市場シェアは非常に大きいようです。
coteyr 16

サーバーにSNIサポートがない場合、SNIサポートのないサーバーの前でSNIサポートのあるプロキシを使用することができます。
カスペルド16

1
@coteyr残りのXPユーザーの大半は中国にいます。幸いなことに、少なくともインターネット上では、他の場所での使用はほとんどありません。
マイケルハンプトン

7

TLS / SSLについて誤解しているようです。HTTP要求は、サーバーの公開キーによって暗号化されません。これは、以前のハンドシェイクでネゴシエートされたキーを使用して対称暗号によって暗号化されます。

TLSハンドシェイクの簡単な説明:サーバーとクライアントは、いくつかの暗号スイート、対称キー、およびその他の詳細をネゴシエートします。MITMを防止するために、サーバーは通常、証明書(チェーン)をクライアントに送信し、証明書のキーを使用してハンドシェイクを認証します。(クライアント認証やTLS-PSKなど、他にもいくつかのバリアントがありますが、それらはHTTPではあまり使用されません。)クライアントは証明書を検証(通常の方法)または無視できます。

1つのIPで複数のTLS証明書を使用する場合、SNIは重要ですが、サーバーが要求を復号化できることは必須ではありません。SNIがない場合、サーバーはどの証明書チェーンを送信する必要があるかを認識しないため、サーバーは通常1つ(たとえば、最初の仮想ホスト)を選択しますが、これはもちろん間違っている可能性があります。サーバーが誤った証明書チェーンを選択した場合、クライアントはそれを拒否する必要があります(そのため、HTTP要求の送信を続行しません)。ただし、クライアントが証明書を無視する場合(または無効な証明書がこのサイトで信頼できるものとしてマークされている場合)、正常に続行できます。暗号化に使用される対称キーは証明書に依存しないため(TLSは証明書なしでも機能するように設計されているため)、サーバーはそれを解読できます。

TLSについて書いているのに、なぜTLSについて書いているのかというちょっとした注意:TLSはSSLの新しいバージョンです。SSLのすべてのバージョンは、一般的な使用では安全でないと見なされているため、現在は主にTLS(1.0、1.1、1.2)を使用しています。


「HTTP要求は、サーバーの公開キーによって暗号化されません。前のハンドシェイクでネゴシエートされたキーを使用して、対称暗号によって暗号化されます。」それを知りませんでした、ヘッズアップに感謝します!ただし、TLSがSSLに取って代わったことは知っていますが、従来の用語「SSL証明書」に固執しているため、言及しています。
パオロ

「SSL証明書」などの用語がTLSによく使用されることは知っています。私はそれらを避けようとしていますが、あなた(または他の人)がTLSという用語を知っているかどうかはわかりませんでした。
v6ak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.