View a markdown version of this page

Trabalhar com TLS no SDK para Java - AWS SDK for Java 2.x

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhar com TLS no SDK para Java

O AWS SDK para Java usa os recursos de TLS de sua plataforma Java subjacente. Neste tópico, mostramos exemplos usando a implementação do OpenJDK usada pelo Amazon Corretto 17.

Para trabalhar com ele Serviços da AWS, o JDK subjacente deve oferecer suporte a uma versão mínima do TLS 1.2, mas o TLS 1.3 é recomendado.

O TLS 1.3 é o pré-requisito para habilitar a criptografia pós-quântica, que pode exigir ações ou configurações adicionais. Para saber mais, consulte Habilitando o TLS híbrido pós-quântico.

Os usuários devem consultar a documentação da plataforma Java que estão usando com o SDK para descobrir quais versões do TLS estão habilitadas por padrão e como habilitar e desabilitar versões específicas do TLS.

Como verificar as informações da versão do TLS

Usando o OpenJDK, o código a seguir mostra o uso do SSLContext para imprimir quais versões são suportadas. TLS/SSL

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

Por exemplo, o Amazon Corretto 17 (OpenJDK) produz a seguinte saída:

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

Para ver o handshake SSL em ação, e qual versão do TLS é usada, você pode usar a propriedade do sistema javax.net.debug.

Por exemplo, executar um aplicativo Java que use TLS.

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

O aplicativo registra o handshake SSL semelhante ao exemplo a seguir.

... 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 Depuração TLS do cliente HTTP CRT

Se você usar o cliente HTTP AWS CRT, as propriedades de depuração do Java TLS mostradas nos exemplos anteriores não terão efeito porque o CRT usa sua própria pilha TLS. Para inspecionar os detalhes da solicitação no nível da rede com o cliente HTTP CRT, ative o registro de conexões. Para obter mais informações, consulte Ativar o registro em log em nível de rede.

Aplicar uma versão mínima do TLS

O SDK para Java sempre prefere a versão mais recente do TLS compatível com a plataforma e o serviço. A abordagem para impor uma versão mínima específica do TLS difere dependendo de qual cliente HTTP você usa.

Para os clientes HTTP Apache, Netty e URL Connection, que usam a pilha Java TLS, use a propriedade system. jdk.tls.client.protocols Por exemplo, para aplicar o TLS 1.3 para clientes de serviços SDK, forneça a seguinte propriedade do sistema.

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

Para obter mais informações sobre como configurar as versões do TLS, consulte a documentação da sua plataforma Java.

Para o cliente HTTP AWS CRT, que usa sua própria pilha TLS, a propriedade do jdk.tls.client.protocols sistema não tem efeito. Em vez disso, use a opção minTlsVersion builder para impor uma versão mínima do TLS.

O TlsVersionenum (software.amazon.awssdk.http.crt.TlsVersion) fornece os seguintes valores:

TLS_1_3

Aplica o TLS 1.3 como a versão mínima.

SYSTEM_DEFAULT

Usa o comportamento padrão de negociação da versão TLS da plataforma.

O exemplo a seguir cria um cliente HTTP AWS CRT síncrono que impõe o TLS 1.3 como a versão 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();

O exemplo a seguir cria um cliente HTTP AWS CRT assíncrono que impõe o TLS 1.3 como a versão 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();

Em seguida, você pode passar o cliente HTTP configurado para um cliente AWS de serviço.

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 do macOS para TLS 1.3

O Apple Secure Transport, o back-end TLS padrão do macOS CRT, não é compatível com TLS 1.3. Para usar TlsVersion.TLS_1_3 no macOS, você deve definir a variável AWS_CRT_USE_NON_FIPS_TLS_13 de ambiente como um valor não vazio antes de iniciar o aplicativo. Isso muda o CRT para seu back-end s2n-tls.

Observe as seguintes considerações ao usar essa variável de ambiente:

  • O back-end s2n-tls não é. FIPS-validated

  • O back-end s2n-tls não se integra ao macOS Keychain.

Se você não definir essa variável de ambiente no macOS, a primeira solicitação falhará com um CRT-side erro.

Exclusão mútua com configurações TLS pós-quânticas

Você não pode combinar postQuantumTlsEnabled(false) comminTlsVersion(TlsVersion.TLS_1_3). Essas opções são mutuamente exclusivas no contexto do CRT TLS. Se você especificar ambos, o construtor lançará umIllegalStateException.

AWS Atualização de endpoints de API para TLS 1.2

Consulte esta postagem do blog para obter informações sobre a migração dos endpoints de AWS API para o TLS 1.2 na versão mínima.