本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Java 版 SDK 中使用 TLS
Amazon SDK for Java使用其底层 Java 平台的 TLS 功能。在本主题中,我们将展示使用 Amazon Corretto 17 使用的 OpenJDK 实现的示例。
要使用Amazon Web Services,底层 JDK 必须支持 TLS 1.2 的最低版本,但建议使用 TLS 1.3。
用户应查阅他们在 SDK 中使用的 Java 平台的文档,以了解默认情况下启用了哪些 TLS 版本以及如何启用和禁用特定的 TLS 版本。
如何查看 TLS 版本信息
以下代码使用 OpenJDK 展示了如何使用 SSLContext 来打印支持哪
System.out.println(Arrays.toString(SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
例如,亚马逊 Corretto 17 (OpenJDK) 会生成以下输出。
[TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello]
要查看 SSL 握手的运行情况以及使用的 TLS 版本,你可以使用系统属性 java x.net.debug。
例如,运行使用 TLS 的 Java 应用程序。
java app.jar -Djavax.net.debug=ssl:handshake
应用程序记录与以下内容类似的 SSL 握手。
... javax.net.ssl|DEBUG|10|main|2022-12-23 13:53:12.221 EST|ClientHello.java:641|Produced ClientHello handshake message ( "ClientHello": { "client version" : "TLSv1.2", ... javax.net.ssl|DEBUG|10|main|2022-12-23 13:53:12.295 EST|ServerHello.java:888|Consuming ServerHello handshake message ( "ServerHello": { "server version" : "TLSv1.2", ...
强制使用最低 TLS 版本
适用于 Java 的 SDK 始终首选平台和服务支持的最新 TLS 版本。如果您希望强制使用特定的最低 TLS 版本,请查阅您的 Java 平台的文档。
对于基于 OpenJDK 的 JVM,您可以使用系统属性。jdk.tls.client.protocols
例如,如果您希望应用程序中的 SDK 服务客户端使用 TLS 1.2(即使 TLS 1.3 可用),请提供以下系统属性。
java app.jar -Djdk.tls.client.protocols=TLSv1.2
AmazonAPI 端点升级到 TLS 1.2
有关迁移到 TLS 1.2 的最低版本Amazon的 API 端点的信息,请参阅此博客文章