

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在適用於 Java 的 開發套件中使用 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/)。