기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Java용 SDK에서 TLS 작업
는 기본 Java 플랫폼의 TLS 기능을 AWS SDK for Java 사용합니다. 이 항목에서는 Amazon Corretto 17에서 사용하는 OpenJDK 구현을 사용한 예제를 보여줍니다.
를 사용하려면 기본 JDK AWS 서비스가 TLS 1.2의 최소 버전을 지원해야 하지만 TLS 1.3이 권장됩니다.
TLS 1.3은 추가 작업 또는 구성이 필요할 수 있는 포스트 양자 암호화를 활성화하기 위한 사전 조건입니다. 자세한 내용은 하이브리드 포스트 양자 TLS 활성화를 참조하세요.
사용자는 SDK와 함께 사용 중인 Java 플랫폼의 설명서를 참조하여 기본적으로 활성화된 TLS 버전과 특정 TLS 버전을 활성화 및 비활성화하는 방법을 확인해야 합니다.
TLS 버전 정보 확인 방법
OpenJDK를 사용하는 다음 코드는 SSLContext
System.out.println(Arrays.toString(SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
예를 들어, Amazon Corretto 17(OpenJDK)은 다음과 같은 출력을 생성합니다.
[TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello]
작동 중인 SSL 핸드셰이크와 사용된 TLS 버전을 보려면 시스템 속성 javax.net.debug를 사용하면 됩니다.
예를 들어, TLS를 사용하는 자바 애플리케이션을 실행해 보세요.
java app.jar -Djavax.net.debug=ssl:handshake
애플리케이션은 다음과 유사한 SSL 핸드셰이크를 기록합니다.
... 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 CRT HTTP 클라이언트 TLS 디버깅
AWS CRT HTTP 클라이언트를 사용하는 경우 CRT가 자체 TLS 스택을 사용하기 때문에 이전 예제에 표시된 Java TLS 디버그 속성은 영향을 미치지 않습니다. CRT HTTP 클라이언트를 사용하여 네트워크 수준 요청 세부 정보를 검사하려면 유선 로깅을 활성화합니다. 자세한 내용은 유선 로깅 사용 단원을 참조하십시오.
최소 TLS 버전 적용
Java용 SDK는 항상 플랫폼 및 서비스에서 지원하는 최신 TLS 버전을 선호합니다. 특정 최소 TLS 버전을 적용하는 방법은 사용하는 HTTP 클라이언트에 따라 다릅니다.
Java TLS 스택을 사용하는 Apache, Netty 및 URL 연결 HTTP 클라이언트의 경우 시스템 속성를 사용합니다jdk.tls.client.protocols. 예를 들어 SDK 서비스 클라이언트에 TLS 1.3을 적용하려면 다음 시스템 속성을 제공합니다.
java -Djdk.tls.client.protocols=TLSv1.3 -jar app.jar
TLS 버전 구성에 대한 자세한 내용은 Java 플랫폼 설명서를 참조하세요.
자체 TLS 스택을 사용하는 AWS CRT HTTP 클라이언트의 경우 jdk.tls.client.protocols 시스템 속성은 영향을 주지 않습니다. 대신 minTlsVersion빌더 옵션을 사용하여 최소 TLS 버전을 적용합니다.
TlsVersionsoftware.amazon.awssdk.http.crt.TlsVersion)은 다음 값을 제공합니다.
TLS_1_3-
TLS 1.3을 최소 버전으로 적용합니다.
SYSTEM_DEFAULT-
플랫폼의 기본 TLS 버전 협상 동작을 사용합니다.
다음 예제에서는 TLS 1.3을 최소 버전으로 적용하는 동기 AWS CRT HTTP 클라이언트를 생성합니다.
import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtHttpClient httpClient = AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
다음 예제에서는 TLS 1.3을 최소 버전으로 적용하는 비동기 AWS CRT HTTP 클라이언트를 생성합니다.
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtAsyncHttpClient asyncHttpClient = AwsCrtAsyncHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
그런 다음 구성된 HTTP 클라이언트를 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();
TLS 1.3에 대한 macOS 요구 사항
기본 macOS CRT TLS 백엔드인 Apple Secure Transport는 TLS 1.3을 지원하지 않습니다. macOSTlsVersion.TLS_1_3에서를 사용하려면 애플리케이션을 시작하기 전에 환경 변수를 비어 AWS_CRT_USE_NON_FIPS_TLS_13 있지 않은 값으로 설정해야 합니다. 그러면 CRT가 s2n-tls 백엔드로 전환됩니다.
이 환경 변수를 사용할 때 다음 고려 사항에 유의하세요.
-
s2n-tls 백엔드는 FIPS 검증되지 않습니다.
-
s2n-tls 백엔드는 macOS 키체인과 통합되지 않습니다.
macOS에서이 환경 변수를 설정하지 않으면 CRT 측 오류와 함께 첫 번째 요청이 실패합니다.
포스트 양자 TLS 설정을 사용한 상호 제외
postQuantumTlsEnabled(false)와를 결합할 수 없습니다minTlsVersion(TlsVersion.TLS_1_3). 이러한 옵션은 CRT TLS 컨텍스트에서 상호 배타적입니다. 둘 다 지정하면 빌더가를 발생시킵니다IllegalStateException.
AWS API 엔드포인트를 TLS 1.2로 업그레이드
최소 버전의 TLS 1.2로 이동하는 AWS API 엔드포인트에 대한 자세한 내용은이 블로그 게시물