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 für 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, aber TLS 1.3 wird empfohlen.
TLS 1.3 ist die Voraussetzung für die Aktivierung der Post-Quanten-Kryptografie, für die möglicherweise zusätzliche Aktionen oder Konfigurationen erforderlich sind. Weitere Informationen finden Sie unter Hybrid-Post-Quantum-TLS aktivieren.
Benutzer sollten in der Dokumentation der Java-Plattform nachschlagen, die sie zusammen mit dem SDK verwenden, um herauszufinden, welche TLS-Versionen standardmäßig aktiviert sind und wie bestimmte TLS-Versionen aktiviert und deaktiviert werden können.
Wie überprüfe ich die TLS-Versionsinformationen
Unter Verwendung von OpenJDK zeigt der folgende Code die Verwendung von SSLContext,
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 wie folgt.
... 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 TLS-Debugging des CRT-HTTP-Clients
Wenn Sie den AWS CRT-HTTP-Client verwenden, haben die in den vorangegangenen Beispielen gezeigten Java-TLS-Debug-Eigenschaften keine Auswirkung, da der CRT seinen eigenen TLS-Stack verwendet. Um die Anforderungsdetails auf Netzwerkebene mit dem CRT-HTTP-Client zu überprüfen, aktivieren Sie das Wire Logging. Weitere Informationen finden Sie unter Aktivieren Sie die Kabelprotokollierung.
Erzwingen Sie eine Mindestversion von TLS
Das SDK für Java bevorzugt immer die neueste TLS-Version, die von der Plattform und dem Dienst unterstützt wird. Der Ansatz zur Durchsetzung einer bestimmten TLS-Mindestversion 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 TlsVersion software.amazon.awssdk.http.crt.TlsVersion) liefert die folgenden Werte:
TLS_1_3-
Erzwingt TLS 1.3 als Mindestversion.
SYSTEM_DEFAULT-
Verwendet das standardmäßige Aushandlungsverhalten der Plattform für die TLS-Version.
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 Service-Client übergeben. AWS
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 macOS CRT-TLS-Backend, unterstützt TLS 1.3 nicht. Für die Verwendung TlsVersion.TLS_1_3 unter macOS müssen Sie die Umgebungsvariable auf einen nicht leeren Wert setzenAWS_CRT_USE_NON_FIPS_TLS_13, bevor Sie die Anwendung starten. Dadurch wechselt die CRT auf ihr s2n-tls-Backend.
Beachten Sie die folgenden Überlegungen, wenn Sie diese Umgebungsvariable verwenden:
-
Das s2n-tls-Backend ist es nicht. FIPS-validated
-
Das s2n-tls-Backend ist nicht in den macOS-Schlüsselbund integriert.
Wenn Sie diese Umgebungsvariable unter macOS nicht setzen, schlägt die erste Anfrage mit einem Fehler fehl. CRT-side
Gegenseitiger Ausschluss mit Post-Quantum-TLS-Einstellungen
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