什么是相互 TLS (mTLS)?

相互 TLS (mTLS) 是一种身份验证类型,其中连接中的两方使用 TLS 协议相互验证。

学习目标

阅读本文后,您将能够:

  • 解释双向 TLS (mTLS) 的运作原理
  • 了解相互 TLS 和普通 TLS 之间的区别
  • 说明 mTLS 如何阻止攻击

复制文章链接

什么是相互 TLS (mTLS)?

相互 TLS 简称 mTLS,是一种相互身份验证的方法。mTLS 通过验证他们都拥有正确的私人密钥来确保网络连接两端的各方都是他们声称的身份。他们各自的 TLS 证书中的信息提供了额外的验证。

mTLS 通常被用于零信任安全框架*,以验证组织内的用户、设备和服务器。它也可以帮助保持 API 的安全。

*零信任意味着默认情况下不信任任何用户、设备或网络流量,这种方法有助于消除许多安全漏洞。

什么是 TLS?

传输层安全 (TLS) 是互联网上广泛使用的一种加密协议。TLS 的前身是 SSL,在客户端-服务器连接中对服务器进行身份验证,并对客户和服务器之间的通信进行加密,以便外部各方无法窥视通信。

关于 TLS 的运作原理,需要了解三件重要的事情:

1. 公钥和私钥

TLS 使用一种叫做公钥加密的技术运作,它依赖于一对密钥,即公钥和私钥。

  • 任何用公钥加密的东西都只能用私钥解密
  • 任何用私钥加密的东西都只能用公钥解密

因此,一个服务器如果解密了用公钥加密的信息,就证明它拥有私钥。任何人都可以通过查看域或服务器的 TLS 证书来查看公钥。

2. TLS 证书

TLS 证书是一个数据文件,其中包含用于验证服务器或设备身份的重要信息,包括公钥、证书颁发者声明(TLS 证书由证书颁发机构颁发)以及证书的到期日期。

3. TLS 握手

TLS 握手是验证 TLS 证书和服务器拥有私钥的过程。TLS 握手还会确定握手结束后如何进行加密。

mTLS 如何运作?

通常在 TLS 中,服务器有一个 TLS 证书和一个公钥/私钥对,而客户端没有。典型的 TLS 流程是这样运作的:

  1. 客户端连接到服务器
  2. 服务器出示其 TLS 证书
  3. 客户端验证服务器的证书
  4. 客户端和服务器通过加密的 TLS 连接交换信息

然而,在 mTLS 中,客户端和服务器都有一个证书,并且双方都使用它们的公钥/私钥对进行身份验证。与常规 TLS 相比,mTLS 中有一些额外步骤来验证双方(额外的步骤加粗显示)。

  1. 客户端连接到服务器
  2. 服务器出示其 TLS 证书
  3. 客户端验证服务器的证书
  4. 客户端出示其 TLS 证书
  5. 服务器验证客户端的证书
  6. 服务器授予访问权限
  7. 客户端和服务器通过加密的 TLS 连接交换信息

mTLS 中的证书颁发机构

实施 mTLS 的组织充当其自己的证书颁发机构。这与标准 TLS 相反,标准 TLS 的证书颁发机构是一个外部组织,负责检查证书所有者是否合法拥有关联(了解 TLS 证书验证)。

mTLS 需要“根”TLS 证书;这使组织能够成为他们自己的证书颁发机构。授权客户端和服务器使用的证书必须与此根证书相对应。根证书是自签名的,这意味着组织自己创建它。(这种方法不适用于公共互联网上的单向 TLS,因为必须由外部证书颁发机构颁发这些证书。)

为什么使用 mTLS?

mTLS 有助于确保客户端和服务器之间的流量是安全和可信的。这为登录到组织网络或应用程序的用户提供了一个额外的安全层。它还可以验证与不遵循登录过程的客户端设备的连接,如物联网 (IoT) 设备。

mTLS 可以防止各种类型的攻击,包括:

  • 在途攻击:在途攻击者把自己放在客户端和服务器之间,拦截或修改两者之间的通信。当使用 mTLS 时,在途攻击者不能对客户端或服务器进行身份验证,使这种攻击几乎不可能进行。
  • 欺骗攻击:攻击者可以试图在用户面前“伪装”(模仿)Web 服务器,或在 Web 服务器面前伪装用户。当双方都必须用 TLS 证书进行身份验证时,欺骗攻击就会困难得多。
  • 凭证填充:攻击者使用从数据泄露中泄露的凭证集,试图以合法用户身份登录。如果没有合法颁发的 TLS 证书,凭证填充对使用 mTLS 的组织的攻击就无法成功。
  • 暴力攻击:暴力攻击通常由机器人执行,是指攻击者使用快速试错法来猜测用户的密码。mTLS 确保一个密码不足以获得对组织网络的访问权。(速率限制是处理这种类型的机器人攻击的另一种方法。)
  • 网络钓鱼攻击:网络钓鱼攻击的目的通常是为了窃取用户的凭证,然后利用这些凭证入侵网络或应用程序。即使用户上当受骗,攻击者仍然需要 TLS 证书和相应的私钥才能使用这些凭证。
  • 恶意 API 请求:当用于 API 安全时,mTLS 可确保 API 请求只来自合法的、经过身份验证的用户。这可以阻止攻击者发送恶意的 API 请求来利用漏洞或破坏 API 的预期运作方式。

网站已经使用 TLS,那为什么没有在整个互联网上使用 mTLS?

对于日常用途,单向身份验证提供了足够的保护。公共互联网上 TLS 的目标是:1) 确保人们不会访问欺骗性网站,2) 确保私有数据在通过包含互联网的各种网络时安全且加密,以及 3) 确保数据在传输过程中没有改变。客户端仅验证服务器身份的单向 TLS 足以实现这些目标。

此外,将 TLS 证书分发到所有最终用户设备将非常困难。生成、管理和验证为此所需的数十亿证书几乎是不可能的任务。

但在较小的规模上,mTLS 对单个组织非常有用且非常实用,尤其是当这些组织采用零信任方法来确保网络安全时。由于零信任方法默认不信任任何用户、设备或请求,因此组织必须能够在每次尝试访问网络中的任何时间对每个用户、设备和请求进行身份验证。mTLS 通过验证用户和验证设备来帮助实现这一点。

Cloudflare 如何使用 mTLS?

Cloudflare Zero Trust 使用 mTLS 实现零信任安全。 Cloudflare API Shield 也使用 mTLS 来验证 API 端点,确保没有未经授权的各方可以发送潜在的恶意 API 请求。了解如何利用 Cloudflare 实施 mTLS