2

相互SSLセキュリティを備えたWCFサービスを使用していますが、どの証明書がいつ使用されるかについての理解を確認したいと思います。

これは正しいです?

  1. クライアントはサーバーにクライアントの公開証明書を渡します

  2. サーバーはクライアントにサーバーの公開証明書を渡します

  3. クライアントは、サーバーの公開証明書を使用して暗号化された要求を送信します

  4. サーバーはサーバーのプライベート証明書を使用して要求を復号化します

  5. サーバーは、クライアントの公開証明書を使用して暗号化された応答を送信します

  6. クライアントは、クライアントのプライベート証明書を使用して応答を復号化します

それとも他の方法で機能しますか?

WCF相互SSL証明書

4

1 に答える 1

4

RFC 2246、セクション7.4では、ハンドシェイクについて詳しく説明しています。他のバージョンのSSL/TLSは、質問に関してはほとんど同じように機能します。

SSL/TLSには2種類の暗号化が含まれます。非対称鍵暗号化と対称鍵暗号化。証明書は非対称鍵暗号化に使用され、ハンドシェイクプロセスでのみ使用されます。

証明書で使用される暗号化は、ハンドシェイクで使用される非常に短時間です。サーバーの公開鍵と秘密鍵のペア(非対称鍵)は、セッション鍵(対称鍵)を保護するために使用されます。クライアントの公開鍵と秘密鍵のペアは、クライアントが本人であることをサーバーに証明するために使用されます。クライアントはクライアントの秘密鍵(自分だけが知っている)を使用してデータ(両側で認識されているデータ)を暗号化でき、サーバーはクライアントの公開鍵を使用してデータを復号化できるため、これを認識しています。

注文については、以下の要約リストで質問の一部を太字で示しています。これがMSDNからの素晴らしい要約です:

TLSハンドシェイクプロトコルには、次の手順が含まれます。

  1. クライアントは、クライアントのランダム値とサポートされている暗号スイートとともに、「Clienthello」メッセージをサーバーに送信します。
  2. サーバーは、サーバーのランダムな値とともに「Serverhello」メッセージをクライアントに送信することで応答します。
  3. サーバーは認証のために証明書をクライアントに送信し、クライアントに証明書を要求する場合があります。サーバーは「Serverhellodone」メッセージを送信します。
  4. サーバーがクライアントに証明書を要求した場合、クライアントはそれを送信します。
  5. クライアントはランダムなプレマスターシークレットを作成し、サーバーの証明書の公開鍵で暗号化して、暗号化されたプレマスターシークレットをサーバーに送信します。
  6. サーバーはプレマスターシークレットを受け取ります。サーバーとクライアントはそれぞれ、プレマスターシークレットに基づいてマスターシークレットとセッションキーを生成します。
  7. クライアントは「暗号仕様の変更」通知をサーバーに送信して、クライアントがメッセージのハッシュと暗号化に新しいセッションキーの使用を開始することを示します。クライアントは「クライアントが終了しました」というメッセージも送信します。
  8. サーバーは「暗号仕様の変更」を受信し、セッションキーを使用してレコードレイヤーのセキュリティ状態を対称暗号化に切り替えます。サーバーは「サーバーが終了しました」というメッセージをクライアントに送信します。
  9. クライアントとサーバーは、確立したセキュリティで保護されたチャネルを介してアプリケーションデータを交換できるようになりました。クライアントからサーバーへ、およびサーバーからクライアントに送信されるすべてのメッセージは、セッションキーを使用して暗号化されます。

WCFの要求/応答はすべて、クライアント/サーバーが暗号化にセッションキー(対称キー)を使用するように切り替えた後に行われます。この時点では、証明書の秘密鍵/公開鍵は使用されません。

于 2012-12-14T12:42:52.377 に答える