无密钥 SSL 如何工作?

Keyless SSL 使无法共享其私钥的组织可以在保持 SSL/TLS 加密的同时迁移到云。

学习目标

阅读本文后,您将能够:

  • 说明 TLS 握手中的步骤以及会话密钥与私钥之间的区别
  • 了解 Keyless SSL 如何使用私钥将 TLS 握手的一部分与其余握手分开
  • 了解 Diffie-Hellman 与 RSA 握手之间的区别
  • 了解什么是前向保密

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是 Keyless SSL?

Keyless SSL

无密钥 SSL 是向使用云供应商进行 SSL 加密的公司提供的服务。通常情况下,云供应商必须知道公司的私钥,但 Keyless SSL 是避免这样做的一种方法。出于监管原因,许多组织无法共享其私钥。通过使用无密钥 SSL,这些公司在保证密钥安全的同时,仍能使用 TLS 和云服务。

SSL(更确切的叫法是 TLS),是一种用于在网络上验证身份和加密通信的协议。SSL/TLS 要求使用所谓的公钥和私钥,如果某家公司使用该协议来保护往返其网站的流量(请参见 HTTPS),私钥通常仍由该公司持有。但是当该公司迁移到云中并由供应商提供 TLS 加密时,私钥将改为由该供应商持有。

通过将涉及私钥的握手部分移出供应商的服务器,私钥可以安全地保留在公司的手中。云供应商不是直接使用私钥来验证供应商的服务器,而是将数据转发到公司服务器并从公司服务器接收数据来完成此操作。此通信通过安全的加密通道进行。因此,仍然使用私钥,但不会与公司外部的任何人共享。

例如,假设 Acme Co. 实施 TLS。Acme Co. 会将其私钥安全地存储在他们拥有和控制的服务器上。如果 Acme Co. 迁移到云并使用云服务提供商进行 Web 托管,则该供应商将拥有私钥。但如果 Acme Co. 与实施无密钥 SSL/TLS 的供应商一起迁移到云,那么私钥可以保留在 Acme Co. 拥有和控制的服务器上,就像在非云 SSL 实施中一样。

Keyless SSL 如何工作?

无密钥 SSL 基于这样一个事实:私钥仅在 TLS 握手期间使用一次,即 TLS 会话开始时。无密钥 SSL 通过在地理上拆分 TLS 握手的步骤来实现。提供无密钥 SSL 的云供应商将这个过程的私钥部分迁移到另一台服务器上,通常是客户的本地服务器。

当在握手期间解密或签署数据需要私钥时,供应商的服务器会将必要的数据转发给客户的私钥服务器。私钥解密或签署客户服务器上的数据,客户服务器将数据发送回供应商服务器,TLS 握手照常继续。

Keyless SSL 仅从云供应商的角度来看为“无密钥”:他们从不查看其客户的私钥,但客户仍拥有并可使用私钥。同时,公钥仍如常在客户端使用。

无密钥 SSL 如何与 RSA 密钥交换 TLS 握手一起使用?

在 RSA 握手中,TLS 握手的步骤如下:

  1. 客户端向服务器发送一条明文 "hello" 消息,其中包括他们要使用的协议版本、受支持的密码套件列表和称为“客户端随机数”的随机数据短字符串。
  2. 服务器使用其 SSL 证书、首选密码套件和一个不同的随机数据短字符串(称为“服务器随机数”)响应(以明文格式)。
  3. 客户端创建另一组随机数据,称为“预主机密”。客户端从服务器的 SSL 证书中获取公钥,加密预主机密,并将其发送到服务器;只有拥有私钥的人员才能解密预主机密。
  4. 该服务器解密“预主密钥”。注意,这是唯一一次使用私钥!
  5. 现在,客户端和服务器都有客户端随机数、服务器随机数和预主密钥。它们彼此独立,将这三个输入组合起来可得到会话密钥。它们都应达到相同的结果,并且会话期间的所有后续通信都用这些新会话密钥进行加密。
SSL 握手(RSA)——没有使用无密钥 SSL

Keyless SSL 在步骤 4 中生效。凭借 Keyless SSL,云供应商无需自行解密预主机密,而是通过安全通道以加密形式将其发送到客户托管或控制的服务器。客户的私钥将解密预主密码,然后将解密的预主密码发回云供应商。云供应商的服务器使用此项得出会话密钥,并且 TLS 通信如常继续。

Cloudflare 无密钥 SSL 握手(RSA)

无密钥 SSL 如何与 Ephemeral Diffie-Hellman 密钥交换一起使用?

短暂 Diffie-Hellman (DHE) 握手(“短暂”是因为同一密钥从未使用两次)使用 Diffie-Hellman 算法生成会话密钥,这是一种在不安全通道上交换密钥的方法。通过这种 TLS 握手,私钥身份验证成为独立于会话密钥生成的过程。

除了使用的算法之外,DHE 握手和 RSA 握手之间的主要区别在于如何生成预主机密。在 RSA 握手中,预主机密由客户端生成的随机数据组成。在 DHE 握手中,客户端和服务器使用商定的参数分别计算相同的预主机密。

  1. 就像在 RSA 握手中一样,客户端发送他们要使用的协议版本、受支持的密码套件列表以及客户端随机数。
  2. 服务器使用其选择的密码套件、服务器随机数和 SSL 证书响应。在这里,DHE 握手开始与 RSA 握手存在差异:服务器也发送其 Diffie-Hellman (DH) 参数,其将用于计算预主密钥。它也将包含数字签名用于身份验证。这是唯一一次使用私钥,它验证服务器是其声称的身份。
  3. 客户端验证服务器的数字签名并验证 SSL 证书。然后客户端用它的 DH 参数进行回复。
  4. 双方使用客户端的 DH 参数和服务器的 DH 参数,彼此分开计算预主机密。
  5. 然后,他们将此预主机密与客户端随机数和服务器随机数组合以获取会话密钥。
SSL 握手(Diffie-Hellman)——没有使用无密钥 SSL

私钥仅在步骤 2 中使用,这是无密钥 SSL 变得重要的地方。此时,SSL/TLS 供应商将客户端随机数、服务器随机数和服务器的 DH 参数发送到拥有私钥的客户控制的服务器。此信息用于生成服务器的数字签名,且会发送回云供应商,后者将其传递给客户端。客户端能够使用公钥验证此签名,然后握手继续进行。这样,云供应商就不需要接触私钥。

Cloudflare 无密钥 SSL (Diffie Hellman)

短暂 Diffie-Hellman 握手尽管比 RSA 握手花费的时间稍长,但有称为前向保密的优点。由于私钥仅用于身份验证,因此攻击者无法使用它来查找任何指定的会话密钥。

什么是会话密钥?

会话密钥是在 TLS 握手完成后由通过 TLS 进行安全通信的双方使用的对称密钥。一旦双方商定了一组会话密钥,就不再需要使用公钥和私钥。TLS 为每个唯一的会话生成不同的会话密钥。

什么是前向保密?什么是完美前向保密?

前向保密确保加密的数据即使私钥公开时仍保持加密。这也称为“完美前向保密”。如果每个通信会话使用唯一的会话密钥,并且会话密钥与私钥分开生成,则前向保密是可能的。如果单个会话密钥受损,则攻击者只能解密该会话;所有其他会话都将保持加密状态。

在为前向保密设置的协议中,私钥在初始握手过程中用于身份验证,否则不会使用。短暂 Diffie-Hellman 握手将会话密钥与私钥分开生成,因此具有前向保密。

相反,RSA 没有前向保密;在私钥受损的情况下,攻击者可以确定过去对话的会话密钥,因为他们可以解密明文形式的预主密钥以及客户端随机数和服务器随机数。通过将这三者结合起来,攻击者可以得到任何指定的会话密钥。

Cloudflare 如何实施 Keyless SSL?

Cloudflare 是第一个发布无密钥 SSL 的云供应商,让面临严格安全限制的企业(例如银行)能够迁移到云。Cloudflare 同时支持 RSA 和 Diffie-Hellman 握手,因此公司可以集成前向保密,防止攻击者在窃取其私钥后解密其数据。

Cloudflare 服务器与私钥服务器之间的所有通信均通过安全的加密通道进行。此外,尽管需要额外访问私钥服务器,Cloudflare 发现无密钥 SSL 对性能的影响可以忽略不计。

有关无密钥 SSL 工作原理的更多技术细节,请查看这篇博客文章。要进一步了解 Cloudflare 无密钥 SSL 的更多信息,欢迎探索我们的无密钥 SSL 服务