

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在适用于 Java 的 SDK 中使用 TLS
<a name="security-java-tls"></a>

 适用于 Java 的 AWS SDK 使用其底层 Java 平台的 TLS 功能。在本主题中，我们将演示使用 [Amazon Corretto 17](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/index.html) 使用的 OpenJDK 实现的示例。

要使用 AWS 服务，底层 JDK 必须支持 TLS 1.2 的最低版本，但建议使用 TLS 1.3。

用户应查阅他们与 SDK 结合使用的 Java 平台的文档，以了解默认情况下启用了哪些 TLS 版本以及如何启用和禁用特定的 TLS 版本。

## 如何检查 TLS 版本信息
<a name="how-to-check-the-tls-version"></a>

以下代码演示了如何使用 OpenJDK 来打印[SSLContext](https://devdocs.io/openjdk~17/java.base/javax/net/ssl/sslcontext#getSupportedSSLParameters())支持 TLS/SSL 哪些版本。

```
System.out.println(Arrays.toString(SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
```

例如，Amazon Corretto 17 (OpenJDK) 会生成以下输出。

```
[TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello]
```

要查看 SSL 握手的运行情况以及使用的 TLS 版本，可使用系统属性 **javax.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
<a name="enforce-minimum-tls-version"></a>

适用于 Java 的 SDK 始终首选平台和服务支持的最新 TLS 版本。如果您希望强制指定特定的最低 TLS 版本，请查阅 Java 平台的文档。

对于基于 OpenJDK JVMs，您可以使用系统属性。`jdk.tls.client.protocols`

例如，如果您希望应用程序中的 SDK 服务客户端使用 TLS 1.2（即使 TLS 1.3 可用），请提供以下系统属性。

```
java app.jar -Djdk.tls.client.protocols=TLSv1.2
```

## AWS API 端点升级到 TLS 1.2
<a name="tls-more-info"></a>

有关迁移到 TLS 1.2 的最低版本 AWS 的 API 端点的信息，请参阅此[博客文章](https://aws.amazon.com/blogs//security/tls-1-2-required-for-aws-endpoints/)。