Development Logs/Spring Ecosystem

[Spring GW] Netty Http Client에 Java System Property 적용 및 JVM Option 사용이 안되는 이유

유뱅유뱅뱅 2024. 12. 1. 21:42

요약 설명

System.setProperty("https.protocols", "TLSv1"); 설정이 Netty의 HttpClient에 영향을 미치지 않는 이유는, Netty의 HttpClient는 JVM의 기본 HTTPS 설정을 사용하지 않고, 자체적으로 SSL/TLS 연결을 구성하기 때문입니다.

Java의 표준 HttpsURLConnection과 달리, **Netty는 SslContext**를 사용하여 SSL/TLS 설정을 명시적으로 관리합니다. JVM의 https.protocols 설정은 Java의 표준 HTTPS 클라이언트와 라이브러리들에서 사용하는 기본 프로토콜을 설정할 뿐, Netty의 HttpClient는 이 설정을 읽지 않고 별도의 TLS 설정을 사용합니다.

 

상세 설명

1. 독립적인 SSL/TLS 설정:

  • Netty는 SslContext를 통해 SSL/TLS를 설정하며, 이는 JVM의 글로벌 설정과는 독립적입니다.
  • Netty의 SslContext는 SSL/TLS 프로토콜, 암호화 스위트, 신뢰할 수 있는 인증서 등을 직접 설정할 수 있는 유연성을 제공합니다.

2. 고성능 및 비동기 지원:

  • Netty는 비동기 네트워크 라이브러리로, 고성능과 유연성을 위해 독립적인 SSL/TLS 설정을 사용하며, TLS 프로토콜과 암호화 방식을 선택적으로 구성할 수 있습니다.
  • SSL/TLS 설정을 더 낮은 레벨에서 관리하기 때문에 표준 JVM 속성에 의존하지 않습니다.

3. JVM 설정의 적용 범위 한정:

  • https.protocols는 Java의 HttpsURLConnection, Apache HttpClient 등 일반적으로 JVM의 기본 SSL/TLS 설정을 사용하는 라이브러리에만 적용됩니다.
  • Netty처럼 기본 설정을 무시하고 자체 SSL/TLS 설정을 사용하는 라이브러리에는 영향을 미치지 않습니다.

 

결론

  • Netty의 HttpClient에서 TLSv1을 사용하도록 하려면, JVM 속성 대신 SslContext를 통해 Netty의 TLS 설정을 명시적으로 지정해야 합니다. Netty는 이러한 독립적인 설정 방식을 통해 더 세부적인 SSL/TLS 제어를 가능하게 합니다.