Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation du protocole TLS dans le SDK pour Java
AWS SDK pour Java utilise les fonctionnalités TLS de sa plate-forme Java sous-jacente. Dans cette rubrique, nous présentons des exemples utilisant l'implémentation OpenJDK utilisée par Amazon Corretto 17.
Pour fonctionner avec Services AWS, le JDK sous-jacent doit prendre en charge une version minimale de TLS 1.2, mais le protocole TLS 1.3 est recommandé.
Le protocole TLS 1.3 est la condition préalable pour activer la cryptographie post-quantique, qui peut nécessiter des actions ou des configurations supplémentaires. Pour en savoir plus, consultez Activer le TLS post-quantique hybride.
Les utilisateurs doivent consulter la documentation de la plate-forme Java qu'ils utilisent avec le SDK pour savoir quelles versions de TLS sont activées par défaut et comment activer et désactiver des versions spécifiques de TLS.
Comment vérifier les informations de version de TLS
À l'aide d'OpenJDK, le code suivant montre l'utilisation de
System.out.println(Arrays.toString(SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
Par exemple, Amazon Corretto 17 (OpenJDK) produit le résultat suivant.
[TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello]
Pour voir la liaison SSL en action et quelle version de TLS est utilisée, vous pouvez utiliser la propriété système javax.net.debug.
Par exemple, exécutez une application Java qui utilise le protocole TLS.
java app.jar -Djavax.net.debug=ssl:handshake
L'application enregistre la poignée de main SSL de la manière suivante.
... 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 Débogage TLS du client HTTP CRT
Si vous utilisez le client HTTP AWS CRT, les propriétés de débogage Java TLS présentées dans les exemples précédents n'ont aucun effet car le CRT utilise sa propre pile TLS. Pour inspecter les détails des demandes au niveau du réseau avec le client HTTP CRT, activez l'enregistrement des connexions. Pour de plus amples informations, veuillez consulter Activer l'enregistrement des câbles.
Appliquer une version minimale de TLS
Le SDK pour Java préfère toujours la dernière version TLS prise en charge par la plateforme et le service. L'approche pour appliquer une version minimale de TLS spécifique varie en fonction du client HTTP que vous utilisez.
Pour les clients HTTP Apache, Netty et URL Connection, qui utilisent la pile Java TLS, utilisez la propriété system. jdk.tls.client.protocols Par exemple, pour appliquer le protocole TLS 1.3 aux clients du service SDK, indiquez la propriété système suivante.
java -Djdk.tls.client.protocols=TLSv1.3 -jar app.jar
Pour plus d'informations sur la configuration des versions TLS, consultez la documentation de votre plateforme Java.
Pour le client HTTP AWS CRT, qui utilise sa propre pile TLS, la propriété jdk.tls.client.protocols système n'a aucun effet. Utilisez plutôt l'option minTlsVersion Builder pour imposer une version minimale de TLS.
L'TlsVersionsoftware.amazon.awssdk.http.crt.TlsVersion) fournit les valeurs suivantes :
TLS_1_3-
Applique le protocole TLS 1.3 en tant que version minimale.
SYSTEM_DEFAULT-
Utilise le comportement de négociation de version TLS par défaut de la plateforme.
L'exemple suivant crée un client HTTP AWS CRT synchrone qui applique TLS 1.3 comme version minimale.
import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtHttpClient httpClient = AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
L'exemple suivant crée un client HTTP AWS CRT asynchrone qui applique TLS 1.3 comme version minimale.
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtAsyncHttpClient asyncHttpClient = AwsCrtAsyncHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
Vous pouvez ensuite transmettre le client HTTP configuré à un client AWS de service.
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();
Configuration requise pour macOS pour TLS 1.3
Apple Secure Transport, le backend TLS par défaut de macOS CRT, ne prend pas en charge le protocole TLS 1.3. Pour l'utiliser TlsVersion.TLS_1_3 sur macOS, vous devez définir la variable AWS_CRT_USE_NON_FIPS_TLS_13 d'environnement sur une valeur non vide avant de démarrer l'application. Cela fait passer le CRT à son backend s2n-tls.
Tenez compte des considérations suivantes lorsque vous utilisez cette variable d'environnement :
-
Le backend s2n-tls ne l'est pas. FIPS-validated
-
Le backend s2n-tls ne s'intègre pas au trousseau macOS.
Si vous ne définissez pas cette variable d'environnement sur macOS, la première requête échoue avec une CRT-side erreur.
Exclusion mutuelle avec les paramètres TLS post-quantiques
Vous ne pouvez pas combiner postQuantumTlsEnabled(false) avecminTlsVersion(TlsVersion.TLS_1_3). Ces options s'excluent mutuellement dans le contexte du CRT TLS. Si vous spécifiez les deux, le générateur lance unIllegalStateException.
AWS Mise à niveau des points de terminaison d'API vers TLS 1.2
Consultez ce billet de blog