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
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 TlsVersionsoftware.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