我一直在阅读有关安全通信的内容,并对以下内容感到困惑。如果我错了,请纠正我。在我看来,客户端需要两个公钥来建立SSL连接。第一个是CA的公钥,用于验证服务器发送的证书上的签名。证书上的CA签名是使用CA的私钥生成的,因此需要CA的公钥来验证它。第二个是用于加密对称共享密钥的服务器的公钥。共享密钥由客户端生成并发送到服务器以使用服务器的私钥进行解密,因此需要服务器的公钥来加密它。因此,我们需要两个不同的公钥。它是否正确?如果是这样,服务器发送的证书是否包含两个公钥?
答案 0 :(得分:2)
这是正确的,客户端需要链中的每个公钥。
如果是这样,服务器发送的证书是否包含两个公钥?
服务器发送的证书通常不仅是一个证书,而且是证书链。证书永远不会由权威的根证书签名,而是由中间证书签署,中间证书本身由根证书或其他中间证书签名。浏览器只知道根证书,因此服务器需要发送通向根证书的整个链,否则链中会缺少证书,并且无法验证服务器证书是否由受信任的机构签名。此链中的每个证书都包含自己的公钥,因此链中的每个证书都可以使用直接父公钥进行验证,直到您使用浏览器被指示信任的根证书验证链中的最后一个证书。 / p>
答案 1 :(得分:0)
您需要的不仅仅是CA的公钥。你需要自己的证书。这就是传输证书 chain 的原因:除了自签名证书的退化情况之外,这将包含至少两个证书。
NB服务器的公钥不是“用于加密对称共享密钥”。共享对称密钥由两端秘密地独立协商,根本不传输。