为南向流量配置 TLS 1.3

本页面介绍了如何在 Apigee 消息处理器中为南向流量(消息处理器和后端服务器之间的流量)配置 TLS 1.3。

如需详细了解 Java 中的 TLS 1.3 功能,请参阅 JDK 8u261 更新版本说明

启用 TLS 1.3 的步骤取决于您使用的 Java 版本。请参阅下文的 查看消息处理器中的 Java 版本,找出消息处理器中安装的 Java 版本。

TLS v1.3 和 Java 版本

以下版本的 Java 中引入了 TLS 1.3 功能:

  • Oracle JDK 8u261
  • OpenJDK 8u272

以下 Java 版本中提供了 TLS v1.3 功能,但该功能在客户端角色中默认处于停用状态:

  • Oracle JDK 8u261 或更高版本,但低于 Oracle JDK 8u341
  • OpenJDK 8u272 或更高版本,但低于 OpenJDK 8u352

如果您使用的是上述某个版本,则需要启用 TLS v1.3,如如何启用 TLS v1.3(如果未默认启用)中所述。

如果您使用的是以下版本之一,则客户端角色中应该已默认启用 TLS v1.3(消息处理器将充当南向 TLS 连接的客户端),因此您无需采取任何措施:

  • Oracle JDK 8u341 或更高版本
  • OpenJDK 8u352 或更高版本

为确保 TLS v1.3 正常运行,必须满足以下所有条件:

  • Message Processor 上的底层 Java 必须支持 TLS v1.3。
  • 必须在消息处理器上的 Java 中启用 TLS v1.3。
  • 必须在消息处理器应用中启用 TLS v1.3。

如何在 Java 中默认未启用 TLS v1.3 的情况下启用它。

本部分介绍了如何在您使用以下任一版本的 Java 时启用 TLS v1.3:

  • Oracle JDK 8u261 或更高版本,但低于 Oracle JDK 8u341
  • OpenJDK 8u272 或更高版本,但低于 OpenJDK 8u352

在消息处理器中,设置 Java 属性 jdk.tls.client.protocols。值以英文逗号分隔,可以包含一个或多个 TLSv1TLSv1.1TLSv1.2TLSv1.3SSLv3

例如,设置 -Djdk.tls.client.protocols=TLSv1.2,TLSv1.3 会启用客户端协议 TLSv1.2TLSv1.3

如需了解如何在 Edge 组件中设置 JVM 属性,请参阅更改其他 JVM 属性

如需启用 TLS v1、v1.1、v1.2 和 v1.3 协议,请执行以下操作:

  1. 在消息处理器配置文件 (/opt/apigee/customer/application/message-processor.properties) 中设置以下配置:
       bin_setenv_ext_jvm_opts=-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
  2. 重新启动消息处理器。
>

如何停用默认启用的 TLS v1.3

如果您使用的是 Oracle JDK 8u341 或更高版本,或者 OpenJDK 8u352 或更高版本,系统会默认为客户端启用 TLSv1.3。 如果您希望在此类情况下停用 TLS v1.3,有两种选择:

  • 配置目标服务器的 SSLInfo,并确保协议列表中未提及 TLSv1.3。请参阅 TLS/SSL TargetEndpoint 配置元素注意:如果目标服务器配置中未指定协议,则 Java 支持的任何协议都将作为客户端握手的选项发送。
  • 通过完全停用协议,在消息处理器中停用 TLS v1.3。请参阅 在消息处理器上设置 TLS 协议

在消息处理器中检查 Java 版本

如需检查消息处理器中安装的 Java 版本,请登录消息处理器节点并执行以下命令:

java -version

以下示例输出显示已安装 OpenJDK 8u312。

$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

支持的加密方式

目前,Java 8 支持 2 种 TLS v1.3 加密方式:

  • TLS_AES_256_GCM_SHA384
  • TLS_AES_128_GCM_SHA256

您可以使用 openssl 检查您的目标服务器是否支持 TLS v1.3 以及上述至少一种加密方式(如下所示)。请注意,此示例使用启用了 TLS v1.3 的 openssl11 实用程序。

$ openssl11 s_client -ciphersuites "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256" -connect target_host:target_port -tls1_3