web-dev-qa-db-ja.com

サーバーはSSL / TLSで証明書検証メッセージをどのように検証しますか?

クライアント認証は、SSL/TLSネゴシエーションで使用できます。

このため、サーバーが要求した後、クライアントはCertificate Verify Messageを送信します。

証明書検証メッセージには、サーバーによって検証されるクライアント証明書が含まれています。

私の質問は、サーバーがクライアント証明書(クライアントの公開キーを含む)が正当であることをどのように確認するのですか?

11
Duke Nukem

サーバーには信頼の根がいくつかあり、それを使用するか、またはアプリケーションに応じて、CAの証明書またはそのクライアントの証明書のみが固定されている場合があります。

とにかく、トラストストアを経由して、クライアント証明書がストア内の何かによって署名されているかどうかを確認するか、固定されている場合は、確認するように構成されている1つのCAまたは証明書と照合するだけです。

1
returneax

TLS 1.3プロトコルのハンドシェイク部分には3つの目標があります。

  • 証明書を交換する;
  • 秘密鍵を交換せずに、クライアントが実際に提供された公開証明書に関連付けられた秘密鍵を持っていることをサーバーに確認させます。
  • 一時鍵を交換します。

パート1-証明書の信頼

クライアントはCertificateメッセージで証明書を送信します。

サーバーは、証明書が信頼できるソースからのものかどうかを判断します。サーバー側の信頼できる証明書のリストまたは信頼できる認証局(CA)から信頼できる証明書が見つかるまで、クライアントの証明書の署名、次に各中間証明書の署名を検証します。

疑似コード:

  1. Alice(クライアント)は彼女の公開証明書をBob(サーバー)と証明書チェーンに送信します。
  2. ボブは証明書をハッシュします。
  3. Bobは、チェーン内の上位レベルの証明書を使用して証明書を復号化します。
  4. ボブは2つの結果を比較します。それらが一致する場合、ボブは、証明書がアッパーレバー証明書を使用して本当に署名されたという証拠を持っています。
  5. ボブは、信頼できる証明書が見つかるまで、チェーン(ステップ2、3、4)を続けます。

パート2-クライアントの信頼

クライアントはCertificate Verifyメッセージを送信します。

struct {
  SignatureScheme algorithm;
  opaque signature<0..2^16-1>;
} CertificateVerify;

signature schemeは、使用されるハッシュ関数と署名アルゴリズムを示します。

signatureはクライアントによって生成され、サーバーによって検証されます。実際に署名されたデータはクライアントとサーバーで認識されているため、再送信されません(スペース、コンテキスト文字列、ゼロバイト、および以前のメッセージ)。

疑似コード:

  1. アリス(クライアント)は、非対称鍵ペアを生成します。
  2. 信頼できる機関が公開鍵に署名し、公開証明書を生成します。
  3. アリスはデータをハッシュします。
  4. アリスは自分の暗号化キー(彼女の秘密キー)を使用してハッシュを暗号化します。
  5. ボブ(サーバー)は、前のメッセージから、アリスの公開証明書と証明書チェーンを知っています。
  6. アリスはボブに送信します:署名、ハッシュ関数、署名アルゴリズム。
  7. ボブはデータをハッシュします。
  8. ボブは、アリスの公開証明書を使用して署名を復号化します。
  9. ボブは2つの結果を比較します。それらが一致する場合、ボブは署名がデータに関連付けられているという証拠を持ち、アリスの秘密鍵が署名を生成しました。

ここで、アリスは自分のキーを秘密にしておく必要があり、イブが同じデータと同じ署名でリクエストを再生しないように、データはリクエスト間で異なる必要があります。

理解を深めるのに役立つことを願っています。


参照:
http://www.garykessler.net/library/crypto.html#why
https://tlswg.github.io/tls13-spec/draft-ietf-tls-tls13.html
https://nodejs.org/api/crypto.html#crypto_class_sign
https://www.tutorialspoint.com/cryptography/cryptography_digital_signatures.htm

8
rjobidon