SSL握手过程

我开始考虑安全性并阅读有关SSL握手方案的内容。 在这篇文章中 ,回复者提到对称密钥是在浏览器上生成的,使用服务器的公钥加密并发送到服务器。

然而,在其他文章中,他们提到生成了一个预主密钥,并且代之以用于计算对称密钥。

我可以知道哪个是正确的解释,这个预主密钥是如何生成并用于生成对称密钥的?

您链接的post中的描述只是协议的简化说明。

客户端生成预主密钥,并使用服务器的公钥对其进行加密,作为握手过程的一部分。 然后双方根据RFC 6101中的方法导出对称密钥材料,包括IV和MAC密钥。

下面是一篇描述SSL / TLS握手的优秀文章的链接(包括客户端和服务器使用预主密钥生成主密钥,用于生成一组用于MAC和加密的会话密钥):

HTTPS连接的前几毫秒

说浏览器生成对称密钥只是一种简化(至少比使用证书进行加密更好)。 您可能对Security.SE上的这个答案感兴趣了解更多详情:

然后,密码套件确定最终如何共享这些对称密钥。 SSL / TLS握手的直接目的是在客户端和服务器之间建立共享预主密钥 。 这被更广泛地称为密钥交换(参见RFC 4346附录F.1.1,可能还有第7.4.7节) 。

这分为两类(不包括匿名密钥交换):

  • RSA密钥交换(例如TLS_RSA_WITH_AES_128_CBC_SHA ):客户端使用服务器的公钥(在证书中找到)加密预主密钥。
  • DH(E)密钥交换(例如TLS_DHE_RSA_WITH_AES_256_CBC_SHA ):发生Diffie-Hellman密钥交换。 服务器签署其DH参数,客户端根据服务器证书中的公钥validation签名。 (拥有基于RSA的证书并不意味着RSA密钥交换。)

在握手结束时,无论使用这两个步骤中的哪一个,客户端和服务器都拥有一个共同的预主密钥 ,从中获得主密钥 (参见RFC 4346第8.1节 )。

根据该主密钥 ,双方可以导出加密密钥(和MAC秘密),如RFC 4346第6.3节中所述。