服务器 SSL 证书验证

服务器 SSL 证书验证

这看起来可能相当琐碎,但是我不擅长使用 tls。

我有一个执行相互 tls 身份验证的 openvpn 服务器。

我的 vpn 客户端有一个 ca.crt 文件:

root CA
intermediate CA
issuing CA

我的服务器有一个 server.crt:

server certificate # which is signed by the above "issuing CA"

但是,如果我在我的 vpn 客户端上从 ca.crt 中删除“颁发 CA”和“中间 CA”,我的 vpn 客户端仍然可以正常验证 server.crt。

如果在我的 vpn 客户端上,我在 ca.crt 中放置了无效的“根 CA”,则身份验证失败。

我很困惑,如何从我的 vpn 客户端的 ca.crt 中删除“颁发 CA”和“中间 CA”,并且它仍然能够验证 server.crt,因为签署 server.crt 的证书“颁发 ca”不再存在于我的 vpn 客户端的 ca.crt 中。

答案1

TLS要求最终实体证书附带构建链所需的所有证书,但不一定附带根证书,因为根证书应该在验证者的信任锚存储中。提供根证书并不是错误,但验证者会忽略它,因为它们只信任通过其他安全方法接收后明确添加到其信任锚存储中的根证书。

服务器应将其证书连同中间 CA 一起发送,客户端可使用这些证书来验证其已持有的根证书。客户端的中间 CA 证书在此过程中不起任何作用。

类似地,客户端必须将其证书连同中间证书一起发送到服务器,服务器根据其信任锚存储中保存的根 CA 证书对其进行验证。客户端必须拥有中间 CA 证书才能执行此操作。

在您的场景中,从客户端删除中间件不应影响客户端如何验证服务器证书,因为服务器应该将这些中间件作为 TLS 握手的一部分发送。

但是,删除根 CA 确实会影响验证,因为客户端现在没有可以构建和验证证书链的信任锚。

相关内容