据我所知,在经过身份验证的 SSL 连接中,客户端和服务器都拥有私钥,并在建立安全连接之前通过连接提供其证书(以及相应的公钥)。
但是,我有点困惑,因为在服务器和客户端使用这些证书和密钥存在正常的 openSSL 连接,但如果 openssl 命令生成的客户端密钥/公钥是由与服务器私钥不同的 CA 创建的,那么连接应该没有发生,但在我尝试使用 openSSL 的实验中它没有发生。
是不是很意外呢?不同的 CA 在客户端和服务器端通常有不同的密钥集吗? openSSL 是否会为每个会话动态生成密钥对并且不依赖于客户端?有谁知道这些密钥/证书如何在服务器和客户端工作,以及这些密钥和证书之间是否有任何类型的关系/依赖关系?
答案1
没有要求认证路径服务器身份验证和客户端身份验证相同。
服务器身份验证所需要做的就是服务器提供一个证书(以及任何从属/中间 CA 证书),该证书链接到信任锚(实际上,是存储在客户端信任存储中的根 CA 证书)客户信任。客户端现在信任服务器。
同样,对于客户端身份验证客户必须提供一个证书(以及任何从属/中间 CA 证书),该证书链接到信任锚(同样是根 CA 证书),服务器信任。服务器现在信任客户端。
两个信任锚不必相同,只需被相关方信任即可。