security - TLS/SSL 在客户端证书方面究竟是如何工作的?

标签 security ssl

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

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

如果有人能阐明协议(protocol)的这一部分,我将很高兴。

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

最佳答案

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

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

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

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

  • 客户端拥有私钥(否则用公钥解密是不正确的)
  • 客户端在这次握手的另一端,它防止客户端证书验证从另一次握手中重放。

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

关于security - TLS/SSL 在客户端证书方面究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869178/

相关文章:

redirect - 无限重定向 - nginx

ruby-on-rails - Rails 错误 : certificate verify failed. ..我已经尝试了一切

postgresql - 如何使用 ssl 选项保护 npgsql 连接

security - 指纹扫描仪如何保护其指纹数据存储?

javascript - 公开 AWS Cognito ID 是否安全?

spring - 如何使用 SSL 和 Spring Boot 连接到 PostgresQL?

security - 使用自定义域的安全 websocket 到 OpenShift 应用程序失败

python - 有没有办法在不传递参数的情况下调用函数?

java - 如何使用 conda 安装的 Java 修复 "unable to find valid certification path to requested target"错误?

security - 如何通过 Github Webhooks 安全地加密 secret ?