关于 TLS/SSL

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

传输层安全协议 (TLS)(其前身是安全套接字层 [SSL])是一种标准安全技术,用于在 Web 服务器与 Web 客户端(例如浏览器或应用)之间建立加密链接。加密链接可确保在服务器与客户端之间传递的所有数据保持私密。如需使用 TLS,客户端会使用加密的 HTTPS 协议(而非未加密的 HTTP 协议)向服务器发出安全请求。

Edge 在云部署和本地部署中均支持单向 TLS 和双向 TLS(如需了解支持的 TLS 版本,请参阅支持的软件和支持的版本)。 单向 TLS 使 TLS 客户端能够验证 TLS 服务器的身份。例如,在 Android 手机上运行的应用(客户端)可以验证 Edge API(服务器)的身份。

Apigee 还支持使用双向 TLS 或客户端 TLS 的更强身份验证方式。您通常会实现双向 TLS 来增强端到端安全性,并保护您的数据免遭客户端攻击(例如客户端欺骗或中间人攻击)。在双向 TLS 中,客户端会先验证服务器的身份,然后服务器再验证客户端的身份。

TLS 术语

在配置 TLS 之前,您应熟悉以下重要术语和概念:

术语

定义

CA

证书授权机构。用于签发证书和验证证书真实性的可信实体,例如 Symantec 或 VeriSign。有一种证书称为自签名证书,不需要 CA。

证书链

通常,您不会拥有由 CA 的根私钥签名的证书。而是拥有证书以及一个或多个形成链的中间证书。证书链中的最后一个中间证书通常由 CA 的根私钥签名。

CSR

证书签名请求。CSR 是在 TLS 服务器上基于私钥生成的文件。CSR 包含公钥和其他信息,例如组织名称、位置和域名。CA 对 CSR 进行签名以创建 TLS 证书。 当证书过期且您想要续订时,通常会生成 CSR。

DER

唯一编码规则。DER 格式是证书的二进制形式,而不是 ASCII PEM 格式。有时,它的文件扩展名为 .der,但通常为 .cer。区分 DER .cer 文件和 PEM .cer 文件的唯一方法是在文本编辑器中打开该文件,然后查找 BEGINEND 语句。所有类型的证书和私钥都可以采用 DER 格式进行编码。DER 通常与 Java 平台搭配使用。

密钥别名

密钥别名用于在密钥库中唯一标识密钥库条目(TLS 证书和相应的私钥)。

在 Apigee Edge 中,当您使用界面或 API 将证书/密钥上传到密钥库时,KeyAlias 会被称为 alias

密钥库

密钥库是一个存储库,包含一个或多个 TLS 证书以及相应的私钥,用于在客户端与服务器之间的 TLS 握手过程中标识实体。

北向连接上,路由器充当服务器,其证书存储在 Apigee Edge 的密钥库中。

南向连接中,消息处理器充当客户端,后端服务器充当服务器。客户端证书及其私钥存储在 Apigee Edge 的密钥库中。

P7B

PKCS #7 或 P7B 格式通常以 Base64 ASCII 格式存储,文件扩展名为 .p7b 或 .p7c。P7B 证书包含 -----BEGIN PKCS7----------END PKCS7----- 语句。P7B 文件仅包含证书和链证书,不包含私钥。

PEM

隐私增强邮件 (PEM) 格式是一种基于文本的 ASCII 格式,它是二进制唯一编码规则 (DER) 格式的 Base64 编码。PEM 证书 可以在任何文本编辑器中打开,实际证书内容位于 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 语句之间。

它符合用于存储证书、证书链或私钥的 X.509 格式。如果您的证书或私钥不是由 PEM 文件定义的,您可以使用 OpenSSL 等实用程序将其转换为 PEM 文件。

PKCS #12/PFX PKCS #12 或 PFX 格式是一种二进制格式,用于将服务器证书、任何中间证书和私钥存储在一个可加密的文件中。PFX 文件通常具有 .pfx 和 .p12 等扩展名。PFX 文件通常在 Windows 机器上用于导入和导出证书及私钥。

私钥

在 TLS 服务器上用于解密数据。只有 TLS 服务器拥有私钥,该私钥不会与 TLS 客户端共享。

公钥

用于加密从 TLS 客户端发送到 TLS 服务器的数据。公钥包含在证书中。所有 TLS 客户端都拥有服务器公钥的副本。

参考文档 引用为密钥库提供了一定程度的间接性;因此,只要保持相同的引用和密钥别名,密钥库更改就不需要更新虚拟主机。这样一来,您就可以自行完成这些更改,从而减少对 Apigee 支持团队的依赖。

自签名证书

未经受信任的 CA 签名的证书。颁发者和正文相同;它们使用与所含公钥匹配的私钥进行签名。

SNI

服务器名称指示。允许通过同一 IP 地址和端口提供多个 HTTPS 目标,而无需这些目标使用同一证书。

TLS 证书

一种数字文件,用于在 TLS 交易中标识实体。证书(或 cert)可用于标识 TLS 服务器和 TLS 客户端,具体取决于 TLS 配置。

信任库

包含 TLS 客户端上的可信证书,用于验证提供给客户端的 TLS 服务器证书。这些证书通常是自签名证书或未经可信 CA 签名的证书。

北向连接中,客户端应用的证书存储在 Apigee Edge 的信任库中。仅当您在客户端与 Apigee 之间配置了双向 TLS 时,此属性才是必需的。

南向连接上,后端服务器的证书存储在 Apigee Edge 的信任库中。如果您想在 Apigee Edge 与后端服务器之间的单向或双向 TLS 通信中验证后端的证书,则必须提供此属性。

Apigee Edge 没有单独的信任库对象。因此,信任库是作为密钥库对象创建的,但在使用时(例如在虚拟主机、目标端点、目标服务器等中)会作为信任库引用。

虚拟主机

虚拟主机表示客户端应用的 Apigee API 端点。它是一种实体,可帮助在单个服务器(或服务器池)上托管多个域名(分别处理每个名称)。这样一来,一个服务器可以共享其资源(例如内存和处理器周期),而无需所有提供的服务都使用相同的主机名。

虚拟主机可以处理 HTTP 或 HTTPS(启用 SSL)流量。

可以在单向或双向 TLS 模式下配置启用 SSL 的虚拟主机。 它配置了以下内容:

  • 一个或多个 hostalias(API 端点 DNS 名称)。
  • 端口
  • 密钥库
  • 用于在密钥库中唯一标识某个服务器证书的密钥别名。
  • (可选)信任库(在启用客户端身份验证的双向 TLS 中)。

单向 TLS/SSL

下图展示了 TLS 客户端与 TLS 服务器之间单向身份验证的 TLS/SSL 握手过程:

在单向 TLS 配置中,握手过程如下:

  • 客户端向服务器发出会话请求。
  • 服务器会返回包含其公钥的证书。此证书来自服务器的密钥库,其中还包含服务器的私钥。私钥永远不会发送给客户端。
  • 对于签名证书,客户端会使用包含服务器证书和公钥的信任库来验证证书链是否由受信任的证书授权机构 (CA) 签名。
  • 客户端和服务器会再交换几条消息来验证密钥。
  • 客户端开始与服务器进行 TLS 数据传输。

下图显示了在客户端上使用可选信任库的 TLS/SSL 握手:

如果 TLS 服务器使用自签名证书或未由受信任的 CA 签名的证书,则您需要在客户端上创建信任库。客户端会使用其信任的服务器证书和公钥填充其信任库。当客户端收到证书时,系统会根据其信任库中的证书验证传入的证书。

在单向 TLS 中,Edge 可以是服务器,也可以是客户端,如下所示:

  • 将 Edge 用作 TLS 服务器

    Edge 是托管 TLS 端点的服务器,其中 TLS 端点对应于部署到虚拟主机的 API 代理。客户端是尝试访问 API 代理的应用。在这种情况下,Edge 具有包含证书和私钥的密钥库。

  • Edge 作为 TLS 客户端

    Edge 充当访问后端服务的客户端。在这种情况下,后端服务对应于托管 TLS 端点的服务器。因此,后端服务器有一个包含其证书和私钥的密钥库。

双向 TLS

下图展示了客户端与服务器之间双向 TLS 身份验证的 TLS/SSL 握手过程:

在双向 TLS 中,握手过程如下:

  • 客户端和服务器都有自己的密钥库。客户端的密钥库包含其证书和私钥,服务器的密钥库包含其证书和私钥。
  • TLS 服务器会将其证书提供给 TLS 客户端以进行身份验证。然后,客户端会在向服务器发送证书之前验证服务器的身份。
  • TLS 客户端会将其证书提供给 TLS 服务器,以向服务器进行身份验证。

下图展示了使用可选信任库的 TLS 握手:

在此场景中,握手过程如下:

  • 如果 TLS 服务器使用自签名证书或未由可信 CA 签名的证书,则您需要在 客户端上创建信任库。客户端的信任库中包含服务器证书的副本。在 TLS 握手期间,客户端会将其信任库中的证书与服务器发送的证书进行比较,以验证服务器的身份。
  • 如果 TLS 客户端使用自签名证书或未由受信任的 CA 签名的证书,则在服务器上创建信任库。服务器的信任库中包含客户端证书的副本。在 TLS 握手期间,服务器会将其信任库中的证书与客户端发送的证书进行比较,以验证客户端的身份。

客户端、服务器或两者都可以使用信任库。

在双向 TLS 中,Edge 可以是服务器,也可以是客户端,具体取决于以下情况:

  • 将边缘作为服务器

    Edge 是托管 TLS 端点的服务器,其中 TLS 端点对应于 API 代理。客户端是尝试访问 API 代理的应用。在此场景中,Edge 具有包含证书和私钥的密钥库,并且需要包含客户端证书和 CA 链的信任库。

  • 将 Edge 用作客户端

    Edge 充当访问后端服务的客户端。在这种情况下,后端服务对应于托管 TLS 端点的服务器。因此,后端服务器具有包含其证书和私钥的密钥库。

    Edge 还必须定义一个密钥库,其中包含向后端服务验证自身所需的证书;如果后端服务器使用自签名证书或不受信任的 CA 签名的证书,则还可以定义一个信任库,其中包含来自后端服务器的证书。

请务必注意,无论您决定如何配置,Edge 都足够灵活,可以支持双向 TLS。

SNI 支持

在 Cloud 和 Private Cloud 安装中,Edge 支持从 API 代理到 Edge(其中 Edge 充当 TLS 服务器)以及从 Edge 到目标端点(其中 Edge 充当 TLS 客户端)使用服务器名称指示 (SNI)。

借助 SNI(TLS/SSL 的扩展),多个 HTTPS 目标可以使用相同的 IP 地址和端口提供服务,而无需这些目标使用相同的证书。

如需了解如何为本地安装启用 SNI,请参阅将 SNI 与 Edge 搭配使用

北向和南向

在 Apigee 中,“北向”是指客户端应用用于调用 API 代理的 API 端点。通常,路由器是 Apigee Edge 中的入口点,用于处理传入 Apigee Edge 的请求。因此,在 Apigee 中,用于客户端应用与 Apigee Edge(路由器)之间通信的端点称为北向

在 Apigee 中,“南向”是指 Apigee 用于与后端服务器通信的目标端点。因此,在 Apigee 中,用于在 Apigee Edge(消息处理器)和后端服务器之间进行通信的端点称为南向。消息处理器是 Apigee Edge 的一个组件,用于将 API 请求代理到后端目标服务器。

下图展示了 Apigee Edge 的北向和南向连接:

北向和南向流量。从客户端应用到路由器的流量是北向流量。然后到消息处理器。消息处理器到后端服务器是南向的。