View a markdown version of this page

Trabajar con TLS en el SDK para JavaScript - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajar con TLS en el SDK para JavaScript

AWS SDK para Java Utiliza las capacidades de TLS de su plataforma Java subyacente. En este tema, mostramos ejemplos del uso de la implementación de OpenJDK utilizada por Amazon Corretto 17.

Para funcionar con él Servicios de AWS, el JDK subyacente debe admitir una versión mínima de TLS 1.2, pero se recomienda TLS 1.3.

El TLS 1.3 es el requisito previo para habilitar la criptografía poscuántica, que puede requerir acciones o configuraciones adicionales. Para obtener más información, consulte Habilitar el TLS poscuántico híbrido.

Los usuarios deben consultar la documentación de la plataforma Java que utilizan con el SDK para saber qué versiones de TLS están habilitadas de forma predeterminada y cómo habilitar y deshabilitar versiones específicas de TLS.

Cómo comprobar la información de la versión de TLS

Con OpenJDK, el siguiente código muestra el uso de SSLContext para imprimir qué versiones son compatibles. TLS/SSL

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

Por ejemplo, Amazon Corretto 17 (OpenJDK) produce el siguiente resultado.

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

Para ver el protocolo de enlace SSL en acción y qué versión de TLS se utiliza, puede utilizar la propiedad del sistema javax.net.debug.

Por ejemplo, ejecute una aplicación Java que utilice TLS.

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

La aplicación registra el enlace SSL de forma similar a la siguiente.

... 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 Depuración TLS del cliente HTTP CRT

Si usa el cliente HTTP AWS CRT, las propiedades de depuración de TLS de Java que se muestran en los ejemplos anteriores no tienen ningún efecto porque el CRT usa su propia pila de TLS. Para inspeccionar los detalles de las solicitudes a nivel de red con el cliente HTTP CRT, habilite el registro de conexiones. Para obtener más información, consulte Habilitación del registro en red.

Aplicar una versión mínima de TLS

El SDK para Java siempre prefiere la última versión de TLS compatible con la plataforma y el servicio. El enfoque para aplicar una versión mínima de TLS específica varía según el cliente HTTP que utilice.

Para los clientes HTTP Apache, Netty y URL Connection, que utilizan la pila TLS de Java, utilice la propiedad del sistema. jdk.tls.client.protocols Por ejemplo, para aplicar la TLS 1.3 a los clientes del servicio del SDK, proporcione la siguiente propiedad del sistema.

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

Para obtener más información sobre la configuración de las versiones de TLS, consulte la documentación de su plataforma Java.

Para el cliente HTTP AWS CRT, que usa su propia pila de TLS, la propiedad del jdk.tls.client.protocols sistema no tiene ningún efecto. En su lugar, utilice la opción minTlsVersion de creación para aplicar una versión mínima de TLS.

La TlsVersion enumeración (software.amazon.awssdk.http.crt.TlsVersion) proporciona los siguientes valores:

TLS_1_3

Aplica TLS 1.3 como la versión mínima.

SYSTEM_DEFAULT

Utiliza el comportamiento de negociación de la versión TLS predeterminado de la plataforma.

El siguiente ejemplo crea un cliente HTTP AWS CRT sincrónico que aplica TLS 1.3 como versión mínima.

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

El siguiente ejemplo crea un cliente HTTP AWS CRT asíncrono que aplica TLS 1.3 como versión mínima.

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

A continuación, puede pasar el cliente HTTP configurado a un cliente de servicio. 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();
Requisito de macOS para TLS 1.3

Apple Secure Transport, el backend TLS CRT predeterminado de macOS, no es compatible con TLS 1.3. Para usarla TlsVersion.TLS_1_3 en macOS, debes establecer la variable de entorno en un valor AWS_CRT_USE_NON_FIPS_TLS_13 que no esté vacío antes de iniciar la aplicación. Esto cambia el CRT a su backend s2n-tls.

Tenga en cuenta las siguientes consideraciones cuando utilice esta variable de entorno:

  • El backend s2n-tls no lo es. FIPS-validated

  • El backend s2n-tls no se integra con el llavero de macOS.

Si no configuras esta variable de entorno en macOS, se producirá un error en la primera solicitud. CRT-side

Exclusión mutua con configuraciones de TLS poscuánticas

No se puede combinar conpostQuantumTlsEnabled(false). minTlsVersion(TlsVersion.TLS_1_3) Estas opciones se excluyen mutuamente en el contexto de CRT TLS. Si especificas ambas, el generador generará un. IllegalStateException

AWS Los puntos finales de la API se actualizan a TLS 1.2

Consulte esta entrada de blog para obtener información sobre la migración de los puntos de enlace de AWS API a TLS 1.2 para obtener la versión mínima.