我假设您在 TLS 的上下文中谈论这些,尤其是 TLS 密码。每个组件的作用似乎有些混乱。如果您看到整个图片,那就更容易理解了,所以在这里。
在 TLS 握手期间会发生以下事情:身份验证、密钥交换。有关这些的详细信息取决于所谓的密码套件。这是一个示例。
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
这基本上说明了以下内容。
- 服务器将提供包含RSA公钥的证书。这将用于身份验证。
- 密钥交换将使用ECDHE完成。
- 密钥交换后使用的对称密码将是具有128位密钥的AES-GCM。
- 交换期间使用的 PRF(伪随机函数)是SHA256(它也可能指示带有旧 TLS 版本的 MAC)。
仔细观察,您会看到所有这些在密码套件中是如何表示的。
现在让我们看看这些可能意味着什么:ECDHE-RSA、Static DH、RSA
ECDHE-RSA = 服务器随机生成一个 DH 密钥对,因为证书没有足够的信息发送给客户端以生成主密钥。DH 公钥在“服务器密钥交换”数据包中发送。秘密永远不会通过网络发送。密码套件中的“RSA”指的是随机 DH 公钥签名,而不是证书签名
你在这里是在正确的轨道上,现在,有了关于整个画面的知识,就更容易理解这一点。在“经典”密钥交换期间,证书中的公钥(及其私钥对)用于就对称密钥达成一致。但是,如果服务器的密钥被泄露,这会产生问题。如果证书中公钥对应的私钥被盗,之前记录的流量可以轻松解密。
这是我们通常想要避免的。输入前向保密。该协议引入了独立密钥交换的可能性,它不太依赖于 RSA 密钥对。通常用于此的算法称为Diffie-Hellman。
要使 DH 工作,您需要所谓的 DH 参数,它们基本上是一个素数模数和一个生成器。这些参数是公开的。这些是在服务器设置期间预先计算的,并在密钥交换期间与每个客户端共享。与服务器合作的客户端然后使用这些参数就密钥达成一致,而无需实际通过网络发送它,就像你说的那样。这是可汗学院的精彩视频。DH-key 对的私钥本质上就是视频中的私钥。而公钥是通过网络发送的。
总结起来,ECDHE就是Ephemeral Elliptic Curve Diffie-Hellman,就是椭圆曲线上的DH。临时部分是指每个连接使用不同的、随机生成的 DH 密钥对这一事实。
静态 DH = 服务器在证书中有一个固定的 DH 公钥,客户端将使用它来生成共享密钥。秘密永远不会通过网络发送。由于信息足够,不需要服务器密钥交换消息
静态 DH 是指服务器为每个客户端连接(视频中的私人号码)选择相同的 DH 密钥对。或者,就像您建议的那样,它可以嵌入到证书中。这允许被动监视 TLS 连接。这实质上禁用了前向保密。
RSA = 客户端将使用服务器的公钥加密 PMS 并发送到服务器,服务器将解密 PMS 并生成相同的 PMS。秘密在电线中发送
正是如此。
现在,到达你的问题。
证书中的“RSA 公钥”,对于 TLS-RSA,被客户端用来加密 PMS。它可以在“客户端密钥交换”数据包中看到。那么在 TLS-ECDHE-RSA 的情况下它的作用是什么?
现在,这很容易回答。当存在显式密钥交换算法时,证书中的密钥(本例中为 RSA 公钥)仅用于身份验证。通过验证证书链并验证服务器是否拥有给定证书的公共密钥的私钥,确保您连接到您打算连接的主机。它还将使用其 RSA 私钥对发送给客户端的 DH 公钥进行签名,客户端在握手期间对其进行验证。