您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
服务器名称指示 (SNI) 可让多个 HTTPS 后端服务器通过同一 IP 地址和端口提供服务,而无需这些后端服务器使用同一 TLS 证书。它是 TLS 协议的扩展。在客户端上启用 SNI 后,客户端会在初始 TLS 握手期间传递后端服务器的主机名。这样一来,TLS 服务器便可确定应使用哪个 TLS 证书来验证来自客户端的请求。
默认情况下,Edge for Private Cloud 中的消息处理器组件会停用 SNI,以确保与现有后端服务器的向后兼容性。如果您的后端服务器配置为支持 SNI,则需要在消息处理器组件上启用 SNI。 否则,通过 Apigee Edge 发出的 API 请求将失败并显示 TLS 握手失败错误。
本文档介绍了如何执行以下操作:
- 确定后端服务器是否已启用 SNI
- 在消息处理器上启用 SNI,以便与支持 SNI 的后端服务器通信
- 根据需要在消息处理器上停用 SNI
- 验证 SNI 配置是否已在消息处理器上成功更新
准备工作
启用 SNI 的服务器的标识
本部分介绍如何确定后端服务器是否已启用 SNI。
-
执行
openssl命令,然后尝试连接到相关的服务器主机名(Edge 路由器或后端服务器),但不要传递服务器名称,如下所示:openssl s_client -connect hostname:port
-
您可能会获取证书,有时可能会在
openssl命令中看到握手失败,如下所示:
CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
-
执行
openssl命令,然后尝试通过传递服务器名称来连接到相关服务器主机名(Edge 路由器或后端服务器),如下所示:openssl s_client -connect hostname:port -servername hostname
- 如果您在第 1 步中遇到握手失败,或者在第 1 步和第 2 步中获得不同的证书,则表示指定的服务器已启用 SNI。
- 如果您想针对多个后端服务器验证此情况,则需要针对每个后端服务器重复执行上述步骤。
如果您发现自己有一个或多个已启用 SNI 的后端服务器,则需要按照下文所述在消息处理器组件上启用 SNI。否则,通过 Apigee Edge 发出的 API 请求将失败并显示 TLS 握手失败错误。
在 Edge 消息处理器和后端服务器之间启用 SNI
本部分介绍如何在 Edge 消息处理器和后端服务器之间启用 SNI。可以通过消息处理器组件上的属性 jsse.enableSNIExtension 启用 SNI。如需配置消息处理器上的任何属性,请按照如何配置 Edge 中所述的语法使用令牌。
如需在消息处理器上启用 SNI,请执行以下步骤:
查找 jsse.enableSNIExtension 属性的令牌
以下步骤介绍了如何找到 jsse.enableSNIExtension 属性的令牌:
-
使用以下命令在消息处理器源目录
/opt/apigee/edge-message-processor/source中搜索jsse.enableSNIExtension属性:grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/source
-
此命令的输出显示了消息处理器的属性
jsse.enableSNIExtension的令牌,如下所示:/opt/apigee/edge-message-processor/source/conf/system.properties:jsse.enableSNIExtension={T}conf_system_jsse.enableSNIExtension{/T}其中,
{T}{/T}标记之间的字符串是您可以在 Message Processor 的.properties文件中设置的令牌的名称。因此,属性
jsse.enableSNIExtension的令牌如下所示:conf_system_jsse.enableSNIExtension
在消息处理器上启用 SNI
以下步骤介绍了如何在 Apigee 消息处理器 组件上启用 SNI。
- 在消息处理器机器上,在编辑器中打开以下文件。如果该目录尚不存在,则创建该目录。
/opt/apigee/customer/application/message-processor.properties
例如,如需使用
vi打开文件,请输入以下命令:vi /opt/apigee/customer/application/message-processor.properties
-
在属性文件中添加一行,格式如下:
conf_system_jsse.enableSNIExtension=true
- 保存更改。
-
确保此属性文件归
apigee用户所有,如下所示:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
-
重启消息处理器,如下所示:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 验证 SNI 配置是否已在消息处理器上更新。
- 如果您有多个消息处理器,请在所有消息处理器上重复上述步骤。
停用 Edge 消息处理器与后端服务器之间的 SNI
启用 SNI 后,通常不应再看到任何问题。不过,如果您在启用 SNI 后发现 Edge 消息处理器与后端服务器之间存在任何连接问题,可以随时通过执行以下步骤停用 SNI。
通过将消息处理器组件上的属性 jsse.enableSNIExtension 重新设置为 false,可以停用 SNI。
在消息处理器上停用 SNI
以下步骤介绍了如何在 Apigee 消息处理器上停用 SNI。
-
在消息处理器机器上,通过编辑器打开以下文件。如果该目录尚不存在,则创建该目录。
/opt/apigee/customer/application/message-processor.properties
例如,如需使用
vi打开文件,请输入以下命令:vi /opt/apigee/customer/application/message-processor.properties
-
如果
/opt/apigee/customer/application/message-processor.properties中存在conf_system_jsse.enableSNIExtension=true行,请按如下方式修改该行:conf_system_jsse.enableSNIExtension=false
- 保存更改。
-
确保此属性文件归
apigee用户所有,如下所示:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
-
重启消息处理器,如下所示:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- 验证 SNI 配置是否已在消息处理器上更新。
- 如果您有多个消息处理器,请在所有消息处理器上重复执行上述步骤。
验证消息处理器上的 SNI 配置
本部分介绍了如何验证消息处理器上的 SNI 配置是否已成功更新。
即使您使用令牌 conf_system_jsse.enableSNIExtension 在消息处理器上配置 SNI,您也需要验证实际属性 jsse.enableSNIExtension 是否已设置为新值。
-
在消息处理器机器上,在
/opt/apigee/edge-message-processor/conf目录中搜索属性jsse.enableSNIExtension,并检查该属性是否已设置为新值,如下所示:grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/conf
-
如果消息处理器上的 SNI 配置已成功更新,则上述命令会在
system.properties文件中显示新值。在消息处理器上启用 SNI 后,上述命令的示例结果如下所示:
/opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=true
同样,在消息处理器上停用 SNI 后,上述命令的示例结果如下所示:
/opt/apigee/edge-message-processor/conf/system.properties:jsse.enableSNIExtension=false
在上面的示例输出中,请注意,属性
jsse.enableSNIExtension已在system.properties中更新为新值true或false。这表示 SNI 已在消息处理器上成功启用或停用。 -
如果您仍然看到属性
jsse.enableSNIExtension的旧值,请验证您是否已按照相应部分中概述的所有步骤正确启用或停用 SNI。如果您遗漏了任何步骤,请再次正确重复所有步骤。 - 如果您仍然无法启用/停用 SNI,请与 Apigee Edge 支持团队联系。