RFC 2246、セクション7.4では、ハンドシェイクについて詳しく説明しています。他のバージョンのSSL/TLSは、質問に関してはほとんど同じように機能します。
SSL/TLSには2種類の暗号化が含まれます。非対称鍵暗号化と対称鍵暗号化。証明書は非対称鍵暗号化に使用され、ハンドシェイクプロセスでのみ使用されます。
証明書で使用される暗号化は、ハンドシェイクで使用される非常に短時間です。サーバーの公開鍵と秘密鍵のペア(非対称鍵)は、セッション鍵(対称鍵)を保護するために使用されます。クライアントの公開鍵と秘密鍵のペアは、クライアントが本人であることをサーバーに証明するために使用されます。クライアントはクライアントの秘密鍵(自分だけが知っている)を使用してデータ(両側で認識されているデータ)を暗号化でき、サーバーはクライアントの公開鍵を使用してデータを復号化できるため、これを認識しています。
注文については、以下の要約リストで質問の一部を太字で示しています。これがMSDNからの素晴らしい要約です:
TLSハンドシェイクプロトコルには、次の手順が含まれます。
- クライアントは、クライアントのランダム値とサポートされている暗号スイートとともに、「Clienthello」メッセージをサーバーに送信します。
- サーバーは、サーバーのランダムな値とともに「Serverhello」メッセージをクライアントに送信することで応答します。
- サーバーは認証のために証明書をクライアントに送信し、クライアントに証明書を要求する場合があります。サーバーは「Serverhellodone」メッセージを送信します。
- サーバーがクライアントに証明書を要求した場合、クライアントはそれを送信します。
- クライアントはランダムなプレマスターシークレットを作成し、サーバーの証明書の公開鍵で暗号化して、暗号化されたプレマスターシークレットをサーバーに送信します。
- サーバーはプレマスターシークレットを受け取ります。サーバーとクライアントはそれぞれ、プレマスターシークレットに基づいてマスターシークレットとセッションキーを生成します。
- クライアントは「暗号仕様の変更」通知をサーバーに送信して、クライアントがメッセージのハッシュと暗号化に新しいセッションキーの使用を開始することを示します。クライアントは「クライアントが終了しました」というメッセージも送信します。
- サーバーは「暗号仕様の変更」を受信し、セッションキーを使用してレコードレイヤーのセキュリティ状態を対称暗号化に切り替えます。サーバーは「サーバーが終了しました」というメッセージをクライアントに送信します。
- クライアントとサーバーは、確立したセキュリティで保護されたチャネルを介してアプリケーションデータを交換できるようになりました。クライアントからサーバーへ、およびサーバーからクライアントに送信されるすべてのメッセージは、セッションキーを使用して暗号化されます。
WCFの要求/応答はすべて、クライアント/サーバーが暗号化にセッションキー(対称キー)を使用するように切り替えた後に行われます。この時点では、証明書の秘密鍵/公開鍵は使用されません。