まず、Microsoft TechNetからの引用 Microsoft証明書サービスとSSLの管理 :
要約すると、安全なSSLセッションは、次の手法を使用して確立されます。
ユーザーのWebブラウザーは、安全なURLを使用してサーバーに接続します。
IISサーバーは、ブラウザーに公開鍵とサーバー証明書を送信します。
クライアントとサーバーは、安全な通信に使用する暗号化のレベルをネゴシエートします。
クライアントブラウザは、サーバーの公開鍵を使用してセッションキーを暗号化し、暗号化されたデータをサーバーに送り返します。
IISサーバーは、クライアントから送信されたメッセージを秘密鍵を使用して復号化し、セッションが確立されます。
クライアントとサーバーの両方がセッションキーを使用して、送信されたデータを暗号化および復号化します。
したがって、基本的に、SSLは非対称暗号化(公開/秘密鍵ペア)を使用して共有セッション鍵を配信し、最終的にとの通信方法を実現しました対称暗号化。
これは正解?
IISを使用してWebサイトをホストしています。1台のマシンに複数のサイトがあり、クライアントブラウザーでSSLURLを使用してサイトに接続したいとします。証明書はいくつ必要ですか。次のアプローチのどれをとるべきですか?
1-単一の証明書を申請し、複数のサイトをホストする単一のサーバーマシンに関連付けます。
2-複数の証明書を申請し、各サイトを独自の証明書に関連付けます。
IIS7では、アプローチ1しか実行できなかったようです。
私はそれを理解します。サーバーマシンに複数の証明書をインストールし、必要に応じて各サイトを個別の証明書でバインドすることができます。
はい、そうです。他のIDを検証するには非対称暗号化が必要です。その後、高速であるため対称暗号化が使用されます。
ポイント4と5は間違っています。サーバーとクライアントは、同じセッションキーを個別に計算します。実際に送信されることはありません。
サーバーのリスニングポートごとに1つのSSL証明書のみを持つことができます。これは、最初に送信されるのがサーバー証明書であるためです(タイムラインのように)。これはHTTPリクエストの前であるため、単一のサーバー(foo.comとbar.comなど)で2つのドメインをホストしようとすると、サーバーがクライアントに送信する証明書を知る方法がありません。
この問題を解決するには、いくつかの異なる方法があります。
更新を別の質問として投稿することをお勧めします。
いずれにせよ、サイトごとに1つずつ、複数の証明書が必要になります。これらの証明書は、マシンをアドレスに関連付けることを忘れないでください。 Webサイトごとに(潜在的に)異なるアドレスが割り当てられるため、サイトごとに異なる証明書が必要になります
。
答えは両方です。以下のdigicert.comから4つのステップで素晴らしい説明が見つかります:
。
- サーバーは、非対称公開鍵のコピーを送信します。
- ブラウザは対称セッションキーを作成し、サーバーの非対称公開キーで暗号化します。次に、それをサーバーに送信します。
- サーバーは、非対称秘密鍵を使用して暗号化されたセッション鍵を復号化し、対称セッション鍵を取得します。
- サーバーとブラウザは、symmetricセッションキーを使用して、送信されたすべてのデータを暗号化および復号化するようになりました。これにより、ブラウザとサーバーのみが対称セッションキーを認識し、セッションキーはそのセッションにのみ使用されるため、セキュリティで保護されたチャネルが可能になります。翌日ブラウザが同じサーバーに接続する場合は、新しいセッションキーが作成されます。
セッションキーがクライアントとサーバーによって独立して計算され、キーが送信されない場合は、Diffie-Hellmanキー交換です: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange --- Nice Paintの図を参照してください。PKIは、クライアントとサーバーの間で暗号化されたセッションキーを交換します。