您正在查看 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 充当 TLS 服务器
- 从 Edge 到后端的请求。在这种情况下,Edge 充当 TLS 客户端。
如需详细了解 SNI,请参阅:
- https://en.wikipedia.org/wiki/Server_Name_Indication
- http://blog.layershift.com/sni-ssl-production-ready/
支持在 Edge 上向 API 代理发送请求时使用 SNI
对 API 代理的请求的 SNI 支持由主机别名和虚拟主机控制。
虚拟主机和主机别名的简介
在 Edge 中,虚拟主机定义了公开 API 代理的 IP 地址和端口或 DNS 名称和端口,以及按扩展名,应用用于访问 API 代理的网址。 IP 地址/DNS 名称对应于边缘路由器,端口号是路由器上的开放端口。
创建虚拟主机时,您还需要指定虚拟主机的主机别名。
通常,这是虚拟主机的 DNS 名称。在确定处理请求的 API 代理时,路由器会将传入请求的 Host 标头与所有虚拟主机定义的可用的主机别名列表进行比较。
虚拟主机的主机别名和端口号的组合对于 Edge 安装中的所有虚拟主机必须是唯一的。这意味着,如果多个虚拟主机具有不同的主机别名,则可以使用相同的端口号。
虚拟主机还定义了是使用 HTTP 协议还是使用加密 HTTPS 协议(使用 TLS)访问 API 代理。配置虚拟主机以使用 HTTPS 时,请将虚拟主机与包含证书和私钥的密钥库相关联,虚拟主机在 TLS 握手期间会使用这些证书和私钥。
如需详细了解虚拟主机,请参阅:
SNI 如何与主机别名搭配使用
借助 SNI,您可以在同一端口上定义多个虚拟主机,每个虚拟主机都具有不同的 TLS 证书和密钥。然后,Edge 会根据 TLS 握手请求中的 server_name 扩展程序确定虚拟主机以及 TLS 使用的证书/密钥对。
Edge 路由器会读取 TLS 握手请求中的 server_name 扩展程序,然后使用该扩展程序搜索所有虚拟主机中的主机别名。如果路由器检测到与主机别名匹配,则会使用与该主机别名关联的虚拟主机中的 TLS 证书和密钥。如果未找到匹配项,TLS 握手会失败。
您可以定义默认证书/密钥对,而不是让 TLS 握手失败,如下一部分中所述。
在 Edge for the Cloud 中定义默认证书/密钥对
Apigee 提供 TLS 证书和私钥来支持 HTTPS。虽然许多客户倾向于在部署时使用自己的证书和私钥,但您也可以使用 Apigee 证书和密钥来部署 API。
在 Edge for Cloud 中,如果路由器无法将 SNI 标头与主机别名匹配,或者客户端不支持 SNI,则路由器会使用 Apigee 提供的默认证书 (*.apigee.net)。
在 Edge Private Cloud 中定义默认证书/密钥对
在 Edge for Private Cloud 中,如果 server_name 扩展名与所有虚拟主机中的主机别名之间未找到匹配项,或者请求客户端不支持 SNI,您可以配置路由器以使用端口上默认虚拟主机中的证书/密钥。默认虚拟主机由组织名称、环境名称和虚拟主机名称组合而成,格式如下:
orgName_envName_vhName
路由器使用按字母顺序排在最前面的 orgName_envName_vhName 组合中的证书/密钥。例如,请求通过端口 443 进入,并且在环境 prod 中为组织 example 定义了两个虚拟主机:
- 虚拟主机名 =
default - 虚拟主机名 =
test
在此示例中,路由器使用名为 default 的虚拟主机中的证书/密钥,因为 example_prod_default 在字母顺序上位于 example_prod_test 之前。
如需启用默认虚拟主机,请执行以下操作:
- 在第一个路由器节点上,修改
/opt/apigee/customer/application/router.properties。 如果该文件不存在,请创建它。 - 向该文件添加以下属性,以便您定义默认虚拟主机:
conf_load_balancing_load.balancing.driver.nginx.fallback.conf.enabled=true
- 重启路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 在所有剩余的路由器上重复执行这些步骤。
您可以在路由器上明确定义默认证书/密钥,而不是使用默认虚拟主机的证书/密钥。使用以下过程来定义显式默认证书/密钥对:
- 在第一个路由器节点上,将证书和私钥复制到路由器节点上可供 apigee 用户访问的位置。例如
/opt/apigee/customer/application。 - 将文件的所有权更改为“apigee. user:
chown apigee:apigee /opt/apigee/customer/application/myCert.pem
chown apigee:apigee /opt/apigee/customer/application/myKey.pem
- 修改“
/opt/apigee/customer/application/router.properties”。 如果该文件不存在,请创建它。 - 向文件添加以下属性,以便您指定默认证书/密钥:
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 - 在
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
- 重启路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router restart
- 在所有剩余的路由器上重复执行这些步骤。
支持从 Edge 到后端的请求的 SNI
在 Apigee Edge for Cloud 和 Private Cloud 部署中,Edge 支持从消息处理器使用 SNI 来定位目标端点。默认情况下,Edge 消息处理器在云中启用 SNI,在私有云中停用 SNI。
在 Edge Private Cloud 中使用 SNI 将流量路由到后端
对于 Edge for Private Cloud,为了向后兼容现有目标后端,Apigee 默认停用了 SNI。如果您的目标后端配置为支持 SNI,您可以按照下文所述为您的 Edge 版本启用此功能。
无需进行其他 Edge 专用配置。如果目标环境配置为 SNI,Edge 会支持该配置。Edge 会自动从请求网址中提取主机名,并将其添加到 TLS 握手请求中。
为 Edge 版本 4.15.07.0x 启用 Edge 与后端之间的 SNI
使用以下步骤启用 SNI:
- 在第一个消息处理器节点上,通过编辑器打开文件
/opt/apigee4/conf/apigee/message-processor/system.properties。 - 在
system.properties中将以下属性设置为 true:jsse.enableSNIExtension=true
- 重启消息处理器:
/opt/apigee4/bin/apigee-service message-processor restart
- 在所有剩余的消息处理器上重复这些步骤。
在 Edge 和后端之间启用 SNI(适用于 Edge 4.16.01 及更高版本)
使用以下步骤启用 SNI:
- 在第一个消息处理器节点上,修改
/opt/apigee/customer/application/message-processor.properties。 如果该文件不存在,请创建它。 - 将以下属性添加到文件中:
conf_system_jsse.enableSNIExtension=true
- 重启消息处理器:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 在所有剩余的消息处理器上重复这些步骤。