더보기
Java17 버전을 이용해, Spring Cloud GW로 내재화 개발을 진행하다가, Provider서버 중 TLSv1 Protocol 만 연결 가능한 케이스가 있어 문제가 발생하였고, 이를 해결하기위해 쓴 글입니다.
Netty Http Client(Default)를 사용하는 Spring Cloud Gateway에서 아래 에러가 발생하였습니다.
- The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]
에러 이유
🚫 TLS HandShake 과정에서 Provider 서버에서는 TLSv1만 제공하는데 이를 요청하는 Gateway에서는 Netty Http Client는 기본값이 TLSv1.2 이상이여서 발생한 문제였습니다.
- Gateway에서 요청시 TLS HandShake - Client Hello 과정에서 Gateway(client)가 지원하는 TLS 버전, 암호화 알고리즘 목록을 보내게 됩니다.
- TLS HandShake 과정 - Server Hello에서 unsupported protocol이라는 응답이 왔습니다.
- TLS 버전
- 이로 인해 Gateway가 Provider서버 요청시 TLSv1.2 이상이 Default 인 것을 확인하였고, 그 하위 Protocol을 지원해 줘야한다고 판단하였습니다.
- 암호화 알고리즘
- Java17 버전의 amazon-corretto-17.jdk 를 사용하고 있었는데, Java Security 속성에서 jdk.tls.disabledAlgorithms의 속성 값에 기본적으로 TLSv1이 존재하여, 제거가 필요했습니다.
- TLS 버전
해결 방법
- TLS 버전
- Netty의 HttpClient에서 TLSv1을 사용하도록 하려면, JVM 속성 대신 SslContext를 통해 Netty의 TLS 설정을 명시적으로 지정해야 합니다. Netty는 이러한 독립적인 설정 방식을 통해 더 세부적인 SSL/TLS 제어를 가능하게 합니다.
- 적용 방법: 2024.11.17 - [Development Logs/Spring Ecosystem] - [Spring GW] Netty HttpClient SSL/TLS Custom 설정하기
- 암호와 알고리즘
- Java Security 속성의 jdk.tls.disabledAlgorithms의 속성 값에서 TLSv1 을 제거해줘야합니다.
- 적용 방법: 2024.12.01 - [Development Logs/Spring Ecosystem] - Java Security Property 수정
테스트
'Development Logs > Spring Ecosystem' 카테고리의 다른 글
[Spring GW] Netty HttpClient TLS버전 추가 설정 기능 테스트 (TLSv1만 연결가능한 서버 구현하기) (0) | 2024.11.17 |
---|---|
[Spring GW] Netty HttpClient SSL/TLS Custom 설정하기 (1) | 2024.11.17 |
[Spring Boot] Spring Boot에서 Actuator 설정 (2) | 2024.11.03 |
[Spring Boot] Spring Boot에서의 Logging Pattern 설정 (0) | 2023.08.04 |
[Spring Test] Test Double에 대한 소개 (0) | 2023.07.17 |