View a markdown version of this page

Utilizzo di TLS nell'SDK for Java - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di TLS nell'SDK for Java

AWS SDK per Java Utilizza le funzionalità TLS della piattaforma Java sottostante. In questo argomento, mostriamo esempi di utilizzo dell'implementazione OpenJDK utilizzata da Amazon Corretto 17.

Per utilizzarlo Servizi AWS, il JDK sottostante deve supportare una versione minima di TLS 1.2, ma TLS 1.3 è consigliato.

TLS 1.3 è il prerequisito per abilitare la crittografia post-quantistica, che può richiedere azioni o configurazioni aggiuntive. Per ulteriori informazioni, consulta Enabling hybrid post-quantum TLS.

Gli utenti devono consultare la documentazione della piattaforma Java che utilizzano con l'SDK per scoprire quali versioni TLS sono abilitate di default e come abilitare e disabilitare versioni TLS specifiche.

Come controllare le informazioni sulla versione TLS

Utilizzando OpenJDK, il codice seguente mostra l'uso di SSLContext per stampare quali versioni sono supportate. TLS/SSL

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

Ad esempio, Amazon Corretto 17 (OpenJDK) produce il seguente output.

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

Per vedere l'handshake SSL in azione e quale versione di TLS viene utilizzata, puoi utilizzare la proprietà di sistema javax.net.debug.

Ad esempio, esegui un'applicazione Java che utilizza TLS.

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

L'applicazione registra l'handshake SSL in modo simile al seguente.

... 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 Debug TLS del client HTTP CRT

Se si utilizza il client HTTP AWS CRT, le proprietà di debug Java TLS mostrate negli esempi precedenti non hanno alcun effetto perché il CRT utilizza il proprio stack TLS. Per controllare i dettagli della richiesta a livello di rete con il client HTTP CRT, abilitate la registrazione via cavo. Per ulteriori informazioni, consulta Abilita la registrazione dei cavi.

Applica una versione TLS minima

L'SDK for Java preferisce sempre l'ultima versione TLS supportata dalla piattaforma e dal servizio. L'approccio per applicare una versione TLS minima specifica varia a seconda del client HTTP utilizzato.

Per i client HTTP Apache, Netty e URL Connection, che utilizzano lo stack Java TLS, utilizzate la proprietà system. jdk.tls.client.protocols Ad esempio, per applicare TLS 1.3 per i client del servizio SDK, fornite la seguente proprietà di sistema.

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

Per ulteriori informazioni sulla configurazione delle versioni TLS, consultate la documentazione della piattaforma Java in uso.

Per il client HTTP AWS CRT, che utilizza il proprio stack TLS, la proprietà di jdk.tls.client.protocols sistema non ha alcun effetto. Utilizzate invece l'opzione minTlsVersion builder per applicare una versione TLS minima.

L'TlsVersionenum (software.amazon.awssdk.http.crt.TlsVersion) fornisce i seguenti valori:

TLS_1_3

Implica TLS 1.3 come versione minima.

SYSTEM_DEFAULT

Utilizza il comportamento di negoziazione della versione TLS predefinito della piattaforma.

L'esempio seguente crea un client HTTP AWS CRT sincrono che applica TLS 1.3 come versione minima.

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'esempio seguente crea un client HTTP AWS CRT asincrono che applica TLS 1.3 come versione minima.

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

È quindi possibile passare il client HTTP configurato a un client di servizio. 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();
Requisiti macOS per TLS 1.3

Apple Secure Transport, il backend TLS predefinito di macOS CRT, non supporta TLS 1.3. Per utilizzarla TlsVersion.TLS_1_3 su macOS, è necessario impostare la variabile AWS_CRT_USE_NON_FIPS_TLS_13 di ambiente su un valore non vuoto prima di avviare l'applicazione. In questo modo il CRT passa al suo backend s2n-tls.

Tenete presente le seguenti considerazioni quando utilizzate questa variabile di ambiente:

  • Il backend s2n-tls non lo è. FIPS-validated

  • Il backend s2n-tls non si integra con il portachiavi macOS.

Se non imposti questa variabile di ambiente su macOS, la prima richiesta ha esito negativo e viene generato un CRT-side errore.

Esclusione reciproca con impostazioni TLS post-quantistiche

Non è possibile combinare con. postQuantumTlsEnabled(false) minTlsVersion(TlsVersion.TLS_1_3) Queste opzioni si escludono a vicenda nel contesto CRT TLS. Se si specificano entrambi, il builder genera un. IllegalStateException

AWS Aggiornamento degli endpoint API a TLS 1.2

Consulta questo post di blog per informazioni sugli endpoint AWS API che passano a TLS 1.2 per la versione minima.