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 per Java
AWS SDK per Java Utilizza le funzionalità TLS della piattaforma Java sottostante. In questo argomento, mostriamo esempi che utilizzano l'implementazione OpenJDK utilizzata da Amazon Corretto 17.
Per funzionare Servizi AWS, il JDK sottostante deve supportare una versione minima di TLS 1.2, ma è consigliato TLS 1.3.
TLS 1.3 è il prerequisito per abilitare la crittografia post-quantistica, che può richiedere azioni o configurazioni aggiuntive. Per saperne di più, vedi Abilitazione del TLS post-quantistico ibrido. https://docs.aws.amazon.com/sdkref/latest/guide/pqtls-details.html
Gli utenti devono consultare la documentazione della piattaforma Java che utilizzano con l'SDK per scoprire quali versioni TLS sono abilitate per impostazione predefinita 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
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 delle richieste a livello di rete con il client HTTP CRT, abilita la registrazione via cavo. Per ulteriori informazioni, consulta Abilita la registrazione dei cavi.
Applica una versione TLS minima
L'SDK per Java preferisce sempre l'ultima versione TLS supportata dalla piattaforma e dal servizio. L'approccio per applicare una specifica versione minima di TLS 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à di sistema. jdk.tls.client.protocols Ad esempio, per applicare TLS 1.3 per i client del servizio SDK, fornisci la seguente proprietà di sistema.
java -Djdk.tls.client.protocols=TLSv1.3 -jar app.jar
Per ulteriori informazioni sulla configurazione delle versioni TLS, consulta la documentazione per la tua piattaforma Java.
Per il client HTTP AWS CRT, che utilizza il proprio stack TLS, la proprietà di jdk.tls.client.protocols sistema non ha effetto. Utilizza invece l'opzione minTlsVersion builder per imporre una versione TLS minima.
L'TlsVersionsoftware.amazon.awssdk.http.crt.TlsVersion) fornisce i seguenti valori:
TLS_1_3-
Applica 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 impone 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 impone 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 CRT predefinito per macOS, non supporta TLS 1.3. Per utilizzarla TlsVersion.TLS_1_3 su macOS, devi impostare la variabile di ambiente su un valore non vuoto prima AWS_CRT_USE_NON_FIPS_TLS_13 di avviare l'applicazione. Questo fa passare il CRT al suo backend s2n-tls.
Quando utilizzate questa variabile di ambiente, tenete presente le seguenti considerazioni:
-
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 fallisce e genera un errore. CRT-side
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 entrambe, il generatore genera un. IllegalStateException
AWS Aggiornamento degli endpoint API a TLS 1.2
Consulta questo post del blog