SSL握手过程

时间:2012-10-31 05:04:04

标签: java security encryption ssl

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

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

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

3 个答案:

答案 0 :(得分:1)

您链接的帖子中的说明只是协议的简化说明。

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

答案 1 :(得分:1)

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

The First Few Milliseconds of an HTTPS Connection

答案 2 :(得分:1)

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

然后,密码套件确定最终如何共享这些对称密钥。 SSL / TLS握手的直接目的是在客户端和服务器之间建立共享预主密钥。这更广泛地称为key-exchange (see RFC 4346 Appendix F.1.1, and perhaps Section 7.4.7)

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

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

在握手结束时,无论使用这两个步骤中的哪一个,客户端和服务器都拥有一个共同的 pre-master secret ,他们从中获取 master秘密(见RFC 4346 Section 8.1)。

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