

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
<a name="security-java-tls"></a>

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. ](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/index.html) 

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 ](https://docs.aws.amazon.com/sdkref/latest/guide/pqtls-details.html) 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
<a name="how-to-check-the-tls-version"></a>

À l'aide d'OpenJDK, le code suivant montre l'utilisation de [ SSLContext ](https://devdocs.io/openjdk~17/java.base/javax/net/ssl/sslcontext#getSupportedSSLParameters()) 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](logging-slf4j.md#sdk-java-logging-verbose).

## Appliquer une version minimale de TLS
<a name="enforce-minimum-tls-version"></a>

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'[TlsVersion](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/http/crt/TlsVersion.html)enum (`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)` avec`minTlsVersion(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 un`IllegalStateException`.

## AWS Mise à niveau des points de terminaison de l'API vers TLS 1.2
<a name="tls-more-info"></a>

Consultez ce billet de [ blog ](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/) pour plus d'informations sur le passage des points de terminaison d' AWS API à TLS 1.2 pour la version minimale.