关于客户端证书,TLS/SSL 究竟如何工作?

Oop*_*ser 2 security ssl

我阅读了 TLS 1.2 RFC,但我无法找到(或理解)客户端证书身份验证的工作原理。

我的理解是服务器可能会请求客户端证书并且客户端应该提供它,但它到底提供了什么?客户端如何证明他拥有私钥(我假设他受到一些挑战并对其进行加密,但他到底加密了什么)?

如果有人能够阐明协议的这一部分,我会很高兴。

编辑:我想要实现的是中间人(就像 fiddler 对服务器证书所做的那样)。

phi*_*rdy 6

我可以从 OpenSSL wiki 复制/粘贴: https://wiki.openssl.org/index.php/SSL_and_TLS_Protocols#Client_Authentication

基本上,客户端将客户端证书发送到与服务器给出的 CA DN 相匹配的服务器。然后,客户端发送一个证书验证,使用其私钥来证明他拥有它。

客户端证书身份验证要求客户端拥有证书并拥有相应的私钥。客户端从不发送其私钥,而是用它来证明他拥有证书中公布的公钥的相应密钥对。

他消化什么?迄今为止整个握手交流的摘要。如果服务器设法用公钥验证这一点,并且它与到目前为止整个握手的摘要相匹配(在服务器端计算),那么我证明了两件事:

  • 客户端拥有私钥(否则用公钥解密将不正确)
  • 客户端位于本次握手的另一侧,它可以防止从另一次握手中重播客户端证书验证。

所以,是的,挑战实际上是整个握手消息。