본문 바로가기

Spring/이슈

[Java] SSL/TLS 지원 버전과 디폴트 프로토콜 변경

반응형
  • 에러 메시지
error msg : javax.net.ssl.SSLException: Received fatal alert: protocol_version

 

  • 에러 원인

    HTTPS 통신 시 SSLProtocol 프로토콜 버전이 권장하는 버전보다 낮아서.

 

자바 버전 별 default / supported protocol version

https://www.ateam-oracle.com/tls-and-java 

 

  • 에러 메시지
error msg : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 

 

  • 에러 원인

    HTTPS 통신 시 서버에서 지원하는 TLS 버전과
    자바 클라이언트의 TLS 버전이 맞지 않아서.

 ☝🏻HTTP, HTTPS, HTTP/2, SSL, TLS 란?

HTTP(Hypertext Transfer Protocol)
클라이언트와 서버 양쪽에서 통신할 수 있도록 구현해야 하는 기본 통신 프로토콜로 요청과 응답, 세션, 캐싱, 인증 등을 다룸.

HTTPS(HTTP Secure)
HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 전송되는 정보를 엿볼 수 있다. 이런 보안 문제로 인해 클라이언트와 서버가 먼저 암호화 통신 채널을 설정한 다음 평문 HTTP 메시지를 전송함으로써 정보 유출을 막음. 
SSL(Secure Socket Layer)
이전에 사용하던 암호화 채널. 현재 SSL(1.0, 2.0, 3.0)의 모든 버전은 여러 가지 보안 문제로 사용되지 않고 대부분의 브라우저에서 경고를 표시한다. SSL 3.0은 TLS 1.0으로 대체되었다. 

TLS(Transport Layer Security)
표준화통신용 암호화 프로토콜이다. 현재 TLS 버전(1.0, 1.1, 1.2)을 사용하고 있으며 1.3 버전은 초안이다. 구글 크롬과 같은 웹 브라우저는 이제 HTTP 웹사이트를 ‘안전하지 않음’으로 표시하고 경고 창 발생시킴.

https://webactually.com/2018/11/http%EC%97%90%EC%84%9C-https%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C/

1. 해결 방법 1

Tomcat 서버의 bin/catalina.sh 의 CATALINA_OPTS에 다음 옵션 추가

-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

https://sarc.io/index.php/java/980-ehcache-replication

2. 해결 방법2

프레임워크 초기화 클래스에서 setting해주기

System.setProperty( "https.protocols", "TLSv1,TLSv1.1,TLSv1.2" );
반응형