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 que funcione Servicios de AWS, el JDK subyacente debe ser compatible con una versión mínima de TLS 1.2, pero se recomienda TLS 1.3.

El TLS 1.3 es un 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 de TLS del cliente HTTP CRT

Si utiliza 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 utiliza 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 cables. 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 de 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 el 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.

En el caso del cliente HTTP AWS CRT, que utiliza su propia pila 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 TlsVersionenumeración (software.amazon.awssdk.http.crt.TlsVersion) proporciona los siguientes valores:

TLS_1_3

Aplica TLS 1.3 como 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 síncrono 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, debe 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 servidor 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 estableces esta variable de entorno en macOS, se produce un CRT-side error en la primera solicitud.

Exclusión mutua con la configuración de TLS poscuántica

No se puede combinar conpostQuantumTlsEnabled(false). minTlsVersion(TlsVersion.TLS_1_3) Estas opciones se excluyen mutuamente en el contexto del TLS de la CRT. Si especifica ambas, el generador lanza una. IllegalStateException

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

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