Development Logs/Spring Ecosystem

[Spring GW] 하위 TLS 버전을 제공하는 Provider 서버 지원 기능

유뱅유뱅뱅 2024. 11. 17. 11:35

 

더보기

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 이상이여서 발생한 문제였습니다.

curl -v 로 해당 Provider TLS handshake 확인

  • 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이 존재하여, 제거가 필요했습니다.

Java버전별 지원 TLS/SSL 확인

 

해결 방법

 

테스트