跳到主要内容

3. 客户端认证 (Client Authentication)

本文档定义了一种以所涉及 client certificate 类型命名的 client authentication mechanism: ECDSA_sign. ECDSA_sign mechanism 可与第 2 节所述任何非匿名 ECC key exchange algorithm 一起使用, 也可与 TLS 中定义的其他非匿名 (非 ECC) key exchange algorithm 一起使用.

注意, 带有 EdDSA public key 的 client certificate 也使用该机制.

server 可以通过在其 CertificateRequest message 中包含该 certificate type 来请求基于 ECC 的 client authentication. client 必须检查自己是否拥有适用于 server 所建议方法的 certificate, 并且是否愿意将其用于 authentication.

如果不满足这些条件, client SHOULD 发送一个不包含 certificate 的 client Certificate message. 在这种情况下, ClientKeyExchange MUST 按第 2 节所述发送, 并且 MUST NOT 发送 CertificateVerify. 如果 server 要求 client authentication, 它可以用 fatal handshake failure alert 响应.

如果 client 拥有适当的 certificate 并愿意将其用于 authentication, 它必须在 client 的 Certificate message 中发送该 certificate (按照第 5.6 节), 并证明它拥有与 certified key 对应的 private key. 确定适当 certificate 以及证明拥有权的过程对每种 authentication mechanism 都不同, 如下所述.

注意: server 请求 (且 client 发送) 与 server certificate 不同类型的 client certificate 是允许的.

3.1. ECDSA_sign

要使用该 authentication mechanism, client MUST 拥有包含可用于 ECDSA 或 EdDSA 的 public key 的 certificate.

client 通过在 CertificateVerify message 中包含 signature 来证明它拥有与 certified key 对应的 private key, 如第 5.8 节所述.