View a markdown version of this page

Arbeiten mit TLS im SDK for Java - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten mit TLS im SDK for Java

Das AWS SDK für Java nutzt die TLS-Funktionen der zugrunde liegenden Java-Plattform. In diesem Thema zeigen wir Beispiele, die die von Amazon Corretto 17 verwendete OpenJDK-Implementierung verwenden.

Um damit arbeiten zu können AWS-Services, muss das zugrunde liegende JDK eine Mindestversion von TLS 1.2 unterstützen, TLS 1.3 wird jedoch empfohlen.

TLS 1.3 ist die Voraussetzung für die Aktivierung der Post-Quantum-Kryptografie, wofür möglicherweise zusätzliche Aktionen oder Konfigurationen erforderlich sind. Weitere Informationen finden Sie unter Hybrid-Post-Quantum-TLS aktivieren.

Benutzer sollten die Dokumentation der Java-Plattform, die sie zusammen mit dem SDK verwenden, nachlesen, um herauszufinden, welche TLS-Versionen standardmäßig aktiviert sind und wie bestimmte TLS-Versionen aktiviert und deaktiviert werden können.

Wie überprüft man die TLS-Versionsinformationen

Unter Verwendung von OpenJDK zeigt der folgende Code die Verwendung von SSLContext, um zu drucken, welche TLS/SSL Versionen unterstützt werden.

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

Amazon Corretto 17 (OpenJDK) erzeugt beispielsweise die folgende Ausgabe.

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

Um den SSL-Handshake in Aktion zu sehen und welche Version von TLS verwendet wird, können Sie die Systemeigenschaft javax.net.debug verwenden.

Führen Sie beispielsweise eine Java-Anwendung aus, die TLS verwendet.

java app.jar -Djavax.net.debug=ssl:handshake

Die Anwendung protokolliert den SSL-Handshake ähnlich dem Folgenden.

... 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", ...
AWS CRT-HTTP-Client, TLS-Debugging

Wenn Sie den AWS CRT-HTTP-Client verwenden, haben die in den vorherigen Beispielen gezeigten Java-TLS-Debug-Eigenschaften keine Auswirkung, da das CRT seinen eigenen TLS-Stack verwendet. Um die Anforderungsdetails auf Netzwerkebene mit dem CRT-HTTP-Client zu überprüfen, aktivieren Sie die Wire-Protokollierung. Weitere Informationen finden Sie unter Aktivieren Sie die Kabelprotokollierung.

Erzwingen Sie eine TLS-Mindestversion

Das SDK for Java bevorzugt immer die neueste TLS-Version, die von der Plattform und dem Dienst unterstützt wird. Der Ansatz, eine bestimmte TLS-Mindestversion durchzusetzen, unterscheidet sich je nachdem, welchen HTTP-Client Sie verwenden.

Verwenden Sie für die HTTP-Clients Apache, Netty und URL Connection, die den Java-TLS-Stack verwenden, die Systemeigenschaftjdk.tls.client.protocols. Um beispielsweise TLS 1.3 für SDK-Dienstclients durchzusetzen, geben Sie die folgende Systemeigenschaft an.

java -Djdk.tls.client.protocols=TLSv1.3 -jar app.jar

Weitere Informationen zur Konfiguration von TLS-Versionen finden Sie in der Dokumentation für Ihre Java-Plattform.

Für den AWS CRT-HTTP-Client, der seinen eigenen TLS-Stack verwendet, hat die jdk.tls.client.protocols Systemeigenschaft keine Auswirkung. Verwenden Sie stattdessen die minTlsVersion Builder-Option, um eine TLS-Mindestversion durchzusetzen.

Das TlsVersionenum (software.amazon.awssdk.http.crt.TlsVersion) stellt die folgenden Werte bereit:

TLS_1_3

Erzwingt TLS 1.3 als Mindestversion.

SYSTEM_DEFAULT

Verwendet das standardmäßige Aushandlungsverhalten der Plattform für TLS-Versionen.

Im folgenden Beispiel wird ein synchroner AWS CRT-HTTP-Client erstellt, der TLS 1.3 als Mindestversion erzwingt.

import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtHttpClient httpClient = AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();

Im folgenden Beispiel wird ein asynchroner AWS CRT-HTTP-Client erstellt, der TLS 1.3 als Mindestversion erzwingt.

import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtAsyncHttpClient asyncHttpClient = AwsCrtAsyncHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();

Anschließend können Sie den konfigurierten HTTP-Client an einen AWS Service-Client übergeben.

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; S3Client s3Client = S3Client.builder() .httpClientBuilder(AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3)) .build();
macOS-Anforderung für TLS 1.3

Apple Secure Transport, das standardmäßige CRT-TLS-Backend von macOS, unterstützt TLS 1.3 nicht. Für die Verwendung TlsVersion.TLS_1_3 unter macOS müssen Sie die Umgebungsvariable AWS_CRT_USE_NON_FIPS_TLS_13 auf einen nicht leeren Wert setzen, bevor Sie die Anwendung starten. Dadurch wird das CRT auf sein s2n-TLS-Backend umgestellt.

Beachten Sie die folgenden Überlegungen, wenn Sie diese Umgebungsvariable verwenden:

  • Das s2n-TLS-Backend ist es nicht. FIPS-validated

  • Das s2n-TLS-Backend lässt sich nicht in den macOS-Schlüsselbund integrieren.

Wenn Sie diese Umgebungsvariable auf macOS nicht setzen, schlägt die erste Anfrage mit einem CRT-side Fehler fehl.

Gegenseitiger Ausschluss bei TLS-Einstellungen nach Quantum

Sie können nicht postQuantumTlsEnabled(false) mit minTlsVersion(TlsVersion.TLS_1_3) kombinieren. Diese Optionen schließen sich im CRT-TLS-Kontext gegenseitig aus. Wenn Sie beide angeben, gibt der Builder eine aus. IllegalStateException

AWS API-Endpunkte werden auf TLS 1.2 aktualisiert

In diesem Blogbeitrag finden Sie Informationen zur Umstellung von AWS API-Endpunkten auf TLS 1.2 für die Mindestversion.