将 SNI 与 Edge 搭配使用

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

服务器名称指示 (SNI) 允许从同一 IP 发送多个 HTTPS 目标 地址和端口,而无需要求这些目标使用相同的 TLS 证书。SNI 何时 那么客户端会将目标端点的主机名作为初始 TLS 握手。这可让 TLS 服务器确定应使用哪个 TLS 证书进行验证 请求。

例如,如果请求目标是 https://example.com/request/path, 那么 TLS 客户端会将 server_name 扩展添加到 TLS 握手 请求,如下所示:

Edge 支持 SNI,用于:

  • 从客户端应用发送到 API 代理的请求。在这种情况下,Edge 充当 服务器
  • 从 Edge 到后端的请求。在这种情况下,Edge 充当 TLS 客户端。

有关 SNI 的更多信息,请参阅:

支持 SNI,以便向 上的 API 代理发送请求 边缘

对 API 代理请求的 SNI 支持由主机别名和虚拟 主机。

关于虚拟 主机和主机别名

使用 Edge 时,虚拟主机定义 IP 地址和端口,或称 DNS 名称和端口, 公开 API 代理的网址,进而指应用用于访问 API 代理的网址。 IP 地址/DNS 名称对应一个边缘路由器,而端口号则是 路由器。

创建虚拟主机时,您还需要指定虚拟主机的主机别名。 通常,这是虚拟主机的 DNS 名称。作为确定 处理请求后,路由器会将传入请求的 Host 标头与 由所有虚拟主机定义的可用主机别名的列表。

所有虚拟主机的主机别名和端口号的组合必须是唯一的 Edge 安装中的虚拟主机。也就是说,多个虚拟主机可以使用 如果它们的主机别名不同,则使用同一个端口号

虚拟主机还可定义 API 代理是使用 HTTP 协议还是 使用 TLS 加密的 HTTPS 协议将虚拟主机配置为使用 HTTPS 时 将虚拟主机与密钥库(包含 虚拟主机。

如需详细了解虚拟主机,请参阅:

SNI 如何与 主机别名

SNI 允许您在同一端口上定义多个虚拟主机,每个主机具有不同的 TLS 证书和密钥。然后,Edge 会确定虚拟主机以及 TLS 使用的证书/密钥对, 根据server_name 扩展。

边缘路由器读取 TLS 握手中的 server_name 扩展 请求,然后使用该存储分区 ID 来搜索所有虚拟网络上的主机别名 主机。如果路由器检测到与主机别名匹配,则会使用 TLS 证书和 与主机别名关联的虚拟主机。如果未找到匹配项,TLS 握手将失败。

您可以定义一个默认证书/密钥对,而不是使 TLS 握手失败,如下所示: 具体说明。

在 Edge 中为 Cloud 定义默认证书/密钥对

Apigee 提供 TLS 证书和私钥来支持 HTTPS。虽然许多客户 希望在部署时使用自己的证书和私钥,则可以将您的 API 部署到 使用 Apigee 证书和密钥。

在 Cloud 的 Edge 中,如果路由器无法将 SNI 标头与主机别名匹配,或者 则路由器将使用 Apigee 提供的默认证书, 即 *.apigee.net。

在 Edge 中为私有云定义默认证书/密钥对

在私有云的 Edge 中,如果 server_name 扩展程序和主机别名之间找不到匹配项 也可以从所有虚拟主机配置 SNI; 路由器以使用端口上默认虚拟主机中的证书/密钥。默认虚拟主机是 由组织名称、环境名称和虚拟主机名的组合定义, 表单:

orgName_envName_vhName

路由器使用 orgName_envName_vhName 组合中的证书/密钥, 按字母顺序排在最前面例如,请求通过端口 443 传入, 在环境 prod 中为组织 example 定义的两个虚拟主机:

  • 虚拟主机名 = default
  • 虚拟主机名 = test

在此示例中,路由器使用名为 default 的虚拟主机的证书/密钥 因为 example_prod_defaultexample_prod_test 之前按字母顺序排列。

如需启用默认虚拟主机,请执行以下操作:

  1. 在第一个路由器节点上,修改 /opt/apigee/customer/application/router.properties。 如果该文件不存在,请创建它。
  2. 将以下属性添加到该文件中,使您能够定义默认虚拟主机:
    conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
  3. 重启路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  4. 在所有其余路由器上重复这些步骤。

您不必使用默认虚拟主机中的证书/密钥,而是可以明确定义 默认证书/密钥。请按照以下步骤定义显式默认值 证书/密钥对:

  1. 在第一个路由器节点上,将证书和私钥复制到路由器节点上的某个位置 能由 apigee 用户访问。例如 /opt/apigee/customer/application
  2. 将文件的所有权更改为“apigee.用户:
    chown apigee:apigee /opt/apigee/customer/application/myCert.pem
    chown apigee:apigee /opt/apigee/customer/application/myKey.pem
  3. 修改“/opt/apigee/customer/application/router.properties”。 如果该文件不存在,请创建它。
  4. 将以下属性添加到该文件中,让您能够指定默认证书/密钥:
    conf_load_balancing_load.balancing.driver.nginx.fallback.server.default.ssl.template.enabled=true
    conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
  5. router.properties 中设置以下属性以指定位置 证书和密钥:
    conf_load_balancing_load.balancing.driver.nginx.ssl.cert=/opt/apigee/customer/application/myCert.pem
    conf_load_balancing_load.balancing.driver.nginx.ssl.key=/opt/apigee/customer/application/myKey.pem
  6. 重启路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  7. 在所有其余路由器上重复这些步骤。

支持从 Edge 到 的请求的 SNI 后端

Edge 支持将消息处理器中的 SNI 用于 Apigee Edge 中的目标端点, 也可用于私有云部署默认情况下,边缘消息处理器会启用 SNI 在私有云中停用。

使用 针对私有云将 SNI 发送到 Edge 中的后端

对于私有云的 Edge,若要向后兼容现有的目标后端, Apigee 默认停用 SNI。如果您的目标后端配置为支持 SNI,您可以 按照以下说明为您的 Edge 版本启用此功能。

无需其他 Edge 专用配置。如果您的目标环境配置为 SNI、Edge 支持该功能。Edge 会自动从请求网址中提取主机名并将其添加到 TLS 握手请求的影响

为 Edge 版本 4.15.07.0x 启用 Edge 和后端之间的 SNI

按照以下步骤启用 SNI:

  1. 在第一个消息处理器节点上,打开文件 /opt/apigee4/conf/apigee/message-processor/system.properties
  2. system.properties 中将以下属性设为 true:
    jsse.enableSNIExtension=true
  3. 重启消息处理器:
    /opt/apigee4/bin/apigee-service message-processor restart
  4. 对其余所有消息处理器重复上述步骤。

针对 Edge 4.16.01 及更高版本在 Edge 和后端之间启用 SNI

按照以下步骤启用 SNI:

  1. 在第一个消息处理器节点上,修改 /opt/apigee/customer/application/message-processor.properties。 如果该文件不存在,请创建它。
  2. 将以下属性添加到该文件:
    conf_system_jsse.enableSNIExtension=true
  3. 重启消息处理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  4. 对其余所有消息处理器重复上述步骤。