您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
服务器名称指示 (SNI) 允许通过同一 IP 地址和端口传送多个 HTTPS 后端服务器,而无需这些后端服务器使用相同的 TLS 证书。它是 TLS 协议的扩展。在客户端上启用 SNI 后,客户端会在初始 TLS 握手过程中传递后端服务器的主机名。这样一来,TLS 服务器可以确定应使用哪个 TLS 证书来验证来自客户端的请求。
默认情况下,系统会在 Private Cloud 的 Edge 中的消息处理器组件上停用 SNI,以确保向后兼容现有的后端服务器。如果您的后端服务器配置为支持 SNI,您需要在消息处理器组件上启用 SNI。否则,通过 Apigee Edge 的 API 请求将失败,并显示 TLS 握手失败。
本文档介绍了如何执行以下操作:
- 确定后端服务器是否已启用 SNI
- 在消息处理器上启用 SNI,以便与支持 SNI 的后端服务器通信
- 根据需要停用邮件处理器上的 SNI
- 在消息处理器上验证 SNI 配置是否已成功更新
准备工作
- 如果您不熟悉 SNI,请参阅将 SNI 与 Edge 搭配使用。
- 如果您不熟悉如何在 Private Cloud 上配置 Edge,请参阅如何配置 Edge。
已启用 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 握手失败。
在边缘消息处理器和后端服务器之间启用 SNI
本部分介绍如何在边缘消息处理器和后端服务器之间启用 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}
标记之间的字符串是您可以在消息处理器的.properties
文件中设置的令牌的名称。因此,属性
jsse.enableSNIExtension
的令牌如下所示:conf_system_jsse.enableSNIExtension
在消息处理器上启用 SNI
以下步骤介绍了如何在 Apigee Message Processor 组件上启用 SNI。
- 在 Message Processor 计算机上,在编辑器中打开以下文件。如果不存在,则创建它。
/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 配置是否已更新。
- 如果您有多个消息处理器,请对所有消息处理器重复上述步骤。
停用边缘消息处理器和后端服务器之间的 SNI
通常,您应该不会在启用 SNI 后看到任何问题。但是,如果在启用 SNI 后观察边缘消息处理器与后端服务器之间存在任何连接问题,您可以随时通过执行以下步骤来停用 SNI。
您可以通过将消息处理器组件上的属性 jsse.enableSNIExtension
重新设置为 false
来停用 SNI。
在消息处理器上禁用 SNI
以下步骤介绍了如何在 Apigee 消息处理器上停用 SNI。
-
在 Message Processor 计算机上,在编辑器中打开以下文件。如果不存在,则创建它。
/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 支持团队。