View a markdown version of this page

Utilisation de TLS dans le SDK pour Java - AWS SDK for Java 2.x

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 de TLS dans le SDK pour Java

Il 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 TLS 1.3 est recommandé.

TLS 1.3 est la condition préalable à l'activation de la cryptographie post-quantique, qui peut nécessiter des actions ou des configurations supplémentaires. Pour en savoir plus, consultez la section Activation du 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 TLS spécifiques.

Comment vérifier les informations de version du protocole TLS

À l'aide d'OpenJDK, le code suivant montre l'utilisation de SSLContext pour afficher les versions prises en charge. TLS/SSL

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 le handshake SSL de la même manière que ci-dessous.

... 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 la journalisation 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 utiliser la dernière version de TLS prise en charge par la plate-forme et le service. L'approche pour appliquer une version TLS minimale 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, fournissez 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 plate-forme 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 de création pour appliquer une version TLS minimale.

L'TlsVersionenum (software.amazon.awssdk.http.crt.TlsVersion) fournit les valeurs suivantes :

TLS_1_3

Applique 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 le protocole TLS 1.3 sous macOS

Apple Secure Transport, le backend TLS CRT par défaut de macOS, 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 basculer le CRT vers son backend s2n-tls.

Prenez en compte les points suivants 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 CRT TLS. Si vous spécifiez les deux, le générateur lance unIllegalStateException.

AWS Mise à niveau des points de terminaison de l'API vers TLS 1.2

Consultez ce billet de blog pour plus d'informations sur le passage des points de terminaison d' AWS API à TLS 1.2 pour la version minimale.