关于 TLS/SSL

您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

传输层安全协议 (TLS) 的前身是安全套接字层 (SSL),是在网络服务器和 Web 客户端(如浏览器或应用)之间建立加密链接的标准安全技术。加密链接可确保在服务器与客户端之间传递的所有数据保持私密状态。如需使用 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

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

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 可以是服务器,也可以是客户端,如下所示:

  • 作为 TLS 服务器的 Edge

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

  • 作为 TLS 客户端的 Edge

    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 端点的服务器。因此,后端服务器具有一个包含其证书和私钥的密钥库。

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

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

SNI 支持

在 Cloud 和私有云安装中,Edge 支持从 API 代理到 Edge(Edge 充当 TLS 服务器)以及从边缘到目标端点(其中 Edge 充当 TLS 客户端)之间的服务器名称指示 (SNI)。

使用 SNI(TLS/SSL 的扩展)时,可以通过同一 IP 地址和端口提供多个 HTTPS 目标,而无需让这些目标使用同一证书。

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

北向和南向

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

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

下图说明了 Apigee Edge 的北向和南向连接:

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