关于 TLS/SSL

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

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

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

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

TLS 术语

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

术语

定义

加拿大

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

证书链

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

客户服务请求

证书签名请求。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

Keystore

密钥库是一种仓库,其中包含一个或多个 TLS 证书和相应的私钥,用于在客户端和服务器之间进行 TLS 握手期间标识实体。

Northbound 连接中,路由器充当服务器,其证书存储在 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 配置。

Truststore

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

北向连接中,客户端应用的证书存储在 Apigee Edge 的信任库中。只有在您在客户端和 Apigee 之间配置了双向 TLS 时,才需要执行此操作。

南向连接中,后端服务器的证书存储在 Apigee Edge 中的信任库中。如果您想在 Apigee Edge 和后端服务器之间通过单向或双向 TLS 通信验证后端的证书,则必须执行此操作。

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

虚拟主机

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

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

启用了 SSL 的虚拟主机可以配置为单向或双向 TLS 模式。 其配置如下:

  • 一个或多个主机别名(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 的扩展),您可以通过同一 IP 地址和端口提供多个 HTTPS 目标,而无需这些目标使用相同的证书。

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

北行和南行

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

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

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

北向和南向流量。客户端应用到路由器是南向流量。然后,前往“消息处理器”。消息处理器到后端服务器是南向流量。