在边缘消息处理器和后端服务器之间配置 SNI

您正在查看的是 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。

  1. 执行 openssl 命令并尝试连接到相关服务器主机名(Edge 路由器或后端服务器),而不传递服务器名称,如下所示:
    openssl s_client -connect hostname:port
    
  2. 您可能会获得证书,有时可能会在 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
    
  3. 执行 openssl 命令,并通过传递服务器名称来尝试连接到相关服务器主机名(Edge 路由器或后端服务器),如下所示:
    openssl s_client -connect hostname:port -servername hostname
    
  4. 如果您在第 1 步中遇到握手失败,或者在第 1 步和第 2 步获得不同的证书,则表示指定的服务器已启用 SNI。
  5. 如果要为多个后端服务器验证这一点,则需要对每个后端服务器重复上述步骤。

如果您发现自己有一台或多台启用了 SNI 的后端服务器,则需要在消息处理器组件上启用 SNI,如下所述。否则,通过 Apigee Edge 的 API 请求将失败,并显示 TLS 握手失败

在边缘消息处理器和后端服务器之间启用 SNI

本部分介绍如何在边缘消息处理器和后端服务器之间启用 SNI。可通过消息处理器组件上的属性 jsse.enableSNIExtension 启用 SNI。如需配置消息处理器上的任何属性,请按照如何配置 Edge 中所述的语法使用令牌。

要在消息处理器上启用 SNI,请执行以下步骤:

  1. 找到 jsse.enableSNIExtension 属性的令牌
  2. 在消息处理器上启用 SNI

查找 jsse.enableSNIExtension 资源的令牌

以下步骤介绍了如何查找 jsse.enableSNIExtension 属性的令牌:

  1. 使用以下命令在消息处理器源目录 /opt/apigee/edge-message-processor/source 中搜索 jsse.enableSNIExtension 属性:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/source
    
  2. 此命令的输出会显示消息处理器属性 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。

  1. 在 Message Processor 计算机上,在编辑器中打开以下文件。如果不存在,则创建它。
    /opt/apigee/customer/application/message-processor.properties
    

    例如,要使用 vi 打开文件,请输入以下命令:

    vi /opt/apigee/customer/application/message-processor.properties
    

  2. 按以下格式在属性文件中添加一个代码行:
    conf_system_jsse.enableSNIExtension=true
    
  3. 保存您的更改。
  4. 确保此属性文件归 apigee 用户所有,如下所示:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  5. 重启消息处理器,如下所示:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  6. 验证消息处理器上的 SNI 配置是否已更新。
  7. 如果您有多个消息处理器,请对所有消息处理器重复上述步骤。

停用边缘消息处理器和后端服务器之间的 SNI

通常,您应该不会在启用 SNI 后看到任何问题。但是,如果在启用 SNI 后观察边缘消息处理器与后端服务器之间存在任何连接问题,您可以随时通过执行以下步骤来停用 SNI。

您可以通过将消息处理器组件上的属性 jsse.enableSNIExtension 重新设置为 false 来停用 SNI。

在消息处理器上禁用 SNI

以下步骤介绍了如何在 Apigee 消息处理器上停用 SNI。

  1. 在 Message Processor 计算机上,在编辑器中打开以下文件。如果不存在,则创建它。
    /opt/apigee/customer/application/message-processor.properties
    

    例如,要使用 vi 打开文件,请输入以下命令:

    vi /opt/apigee/customer/application/message-processor.properties
    

  2. 如果 /opt/apigee/customer/application/message-processor.properties 中存在 conf_system_jsse.enableSNIExtension=true 行,请按如下方式进行修改:
    conf_system_jsse.enableSNIExtension=false
    
  3. 保存您的更改。
  4. 确保此属性文件归 apigee 用户所有,如下所示:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  5. 重启消息处理器,如下所示:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    
  6. 验证消息处理器上的 SNI 配置是否已更新。
  7. 如果您有多个消息处理器,请对所有消息处理器重复上述步骤。

验证消息处理器上的 SNI 配置

本部分介绍如何验证 SNI 配置是否已成功在消息处理器上更新。

即使您使用令牌 conf_system_jsse.enableSNIExtension 在消息处理器上配置 SNI,也需要验证实际属性 jsse.enableSNIExtension 是否已设置为新值。

  1. 在消息处理器机器上,在 /opt/apigee/edge-message-processor/conf 目录中搜索属性 jsse.enableSNIExtension,并检查它是否已使用新值进行设置,如下所示:
    grep -ri "jsse.enableSNIExtension" /opt/apigee/edge-message-processor/conf
    
  2. 如果成功在消息处理器上更新了 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 中的新值 truefalse。这表示在消息处理器上成功启用或停用 SNI。

  3. 如果您仍然看到属性 jsse.enableSNIExtension 的旧值,请验证是否已按照相应部分中概述的所有步骤正确启用或停用 SNI。如果您遗漏了任何步骤,请重新正确重复所有步骤。
  4. 如果您仍无法启用/停用 SNI,请联系 Apigee Edge 支持团队