SSL服务器是否为每个连接的客户端随机生成一个临时密钥对?
我理解公钥加密的工作原理 - 公共加密密钥,秘密解密密钥。这解释了具有SSL证书的主机如何从客户端接收加密数据。但是SSL服务器如何将加密数据发送回客户端?
答案 0 :(得分:4)
(this question中有关于此主题的讨论,虽然它经过多次编辑,但可能会令人困惑。)
服务器证书中的公钥仅在握手期间使用。 在握手期间,客户端和服务器协商用于实际加密的秘密共享密钥(每个会话的新密钥)。
如何协商此秘密取决于密码套件:RSA or Diffie-Hellman密钥交换。当使用RSA密钥交换时,客户端加密预主密钥并将其发送到服务器(谁是唯一能够解密它的服务器)。当使用DH时,客户端在DH交换期间验证服务器发送的临时参数的签名:最终结果也是共享的预主密钥。然后由双方使用交换的随机值来计算主密钥。
TLS规范部分中有更多详细信息,名为"Handshake Protocol Overview"。