相互认证 TLS

Mutual Authentication TLS

在不限制客户端证书的情况下,TLS 中的相互身份验证有什么用?

这是我对使用 TLS 的 client/mutual 身份验证的理解。

这个想法是服务器和客户端 authenticate/verifies 互相认证,

1- The client verifies the server cert based on its CA trust store 
2- The server verifies the client cert based on its *CA trust store*

现在对我来说关键点是第二个,服务器必须通过将其保存在服务器信任库中或保存客户端证书的 CA/ICA 来信任客户端证书,这应该是对客户端私有,而不是通过 public CA,对服务器希望信任的客户端私有 CA。

现在 [rfc5246][1] 说了以下内容

If the client has sent a certificate with signing ability, a digitally-signed
CertificateVerify message is sent to explicitly verify possession of
the private key in the certificate.

这不会实现任何身份验证正确吗?例如,如果我有一台服务器信任由世界各地受信任的 CA 签署的任何证书,那么为什么还要费心进行客户端身份验证呢? [1]: https://www.rfc-editor.org/rfc/rfc5246

当服务器获得客户端证书(作为 TLS 协议的一部分)时,服务器会执行所有正常的证书检查,包括链接到受信任的根。为了让服务器信任 Foo CA 颁发的客户端证书,服务器需要在服务器上安装 Foo CA 根。

X.509 证书的基石是根 CA 证书。主机应该只信任它信任的 CA 颁发的证书。因此,当管理员安装 FooCA 的根目录时,管理员会声明 "I trust the certs issued by Foo and I trust that Foo did appropriate checks that the cert is valid and assigned to the correct entity."

服务器不需要存储客户端的证书,没有理由这样做。当证书作为 TLS 的一部分出现时,服务器只需对其进行检查。不需要持久性,如果有任何失败,包括没有安装 Foo CA 根证书,那么连接就会失败。

服务器确实对客户端进行了身份验证。证书将 public 密钥(在证书中)绑定到实体;例如 CN=frodo@theshire.com。当客户端连接并且服务器请求客户端证书时,服务器将检查证书中的名称(frodo@theshire.com)是否与用户名匹配,但它也会让客户端加密一些数据使用与证书中的 public 密钥关联的私钥,如果服务器成功解密数据,则客户端 (frodo@theshire.com) 确实是他们声称的身份。或者,在最坏的情况下,冒名顶替者获得了 Frodo 的私钥:)

有帮助吗?