【问题标题】:How does simple SSL accomplish server-to-client communication?简单的 SSL 如何完成服务器到客户端的通信?
【发布时间】:2012-04-13 17:54:26
【问题描述】:

SSL 服务器是否会为每个连接的客户端随机生成一个临时密钥对?

我了解公共密钥加密的工作原理——公共加密密钥、秘密解密密钥。这解释了具有 SSL 证书的主机如何从客户端接收加密数据。但是 SSL 服务器如何将加密数据发送回客户端呢?

【问题讨论】:

    标签: encryption ssl


    【解决方案1】:

    (this question 有关于这个话题的讨论,虽然被编辑了很多次,所以可能会造成混淆。)

    服务器证书中的公钥仅在握手期间使用。 在握手期间,客户端和服务器协商一个秘密共享密钥(每个会话一个新的),用于实际加密。

    如何协商这个秘密取决于密码套件:RSA or Diffie-Hellman 密钥交换。当使用 RSA 密钥交换时,客户端加密 pre-master-secret 并将其发送到服务器(谁是唯一能够解密它的人)。使用 DH 时,客户端在 DH 交换过程中验证服务器发送的临时参数的签名:最终结果也是共享的 pre-master-secret。然后,双方将其与交换的随机值一起用于计算主密钥。

    在名为 "Handshake Protocol Overview" 的 TLS 规范部分中有更多详细信息。

    【讨论】:

    • 除了你的正确答案之外,还有一种 SSL 模式,服务器甚至为每个客户端生成一个新的密钥对 - 它被称为“SSL null auth”,因为它不允许对服务器进行身份验证。因此默认情况下,我知道的所有客户端都禁用它。
    • @Robert 我猜你说的是DH_anon 密码套件(TLS_NULL_WITH_NULL_NULL 是另一种情况)。所有 TLS 版本都不鼓励使用它们,但 TLS 1.2 措辞更强烈(“这些密码套件不得被 TLS 1.2 实现使用,除非应用层特别要求允许匿名密钥交换。”)。从技术上讲,DHE 密码套件每次还会生成新的 (DH) 密钥(即使使用 RSA/DSS 身份验证)。
    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 2016-05-14
    • 1970-01-01
    • 2012-12-16
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多