1. 개요

요즘 보안 요구 사항에 보면 TLSv1.1, TLSv1.2 이상으로 하도록 권고하고 있습니다. 

사용하는 제품들 버전별로 지원하는 TLS 버전도 알고 있어야 할 것 같습니다! :)

모르고 있다가 SSLException 들을 만나게 된다면 당황스러우시겠죠? ㅎㅎㅎ

 

2. 에러 내용

아래의 로그는 Apache HTTP Server 2.4 버전 + jdk1.7 사용 Apache Tomcat 7.0 으로 구성되어 있는 시스템에서

HTTPS 통신 시 발생한 로그 입니다. 웹서버에 SSLProtocol 을 TLSv1.1, TLSv1.2 를 설정하였더니 이런 Exception을 뿌리네요.

org.springframework.web.client.ResourceAccessException: I/O error: Received fatal alert: protocol_version; nested exception is javax.net.ssl.SSLException: Received fatal alert: protocol_version

 

3. 왜 이런 현상이?

java 버전별로 defalut로 설정되는 프로토콜 버전이 있습니다. 아래 표 참고하시구요 :)

Java VersionSSL/TLS DefaultOther Supported Versions
Java 6 TLS 1.0 TLS 1.1 (update 111 and later), SSLv3.0*
Java 7 TLS 1.0 TLS 1.2, TLS 1.1, SSLv3.0*
Java 8 TLS 1.2 TLS 1.1, TLS 1.0, SSLv3.0*

* SSLv3 support disabled in January, 2015 patch releases

※ 참고 url : http://www.ateam-oracle.com/tls-and-java/

 

4. 조치 방법

Java 7에서 TLSv1.1과 TLSv1.2를 지원한다고 하니까, 이렇게 설정해 보겠습니다.

Tomcat 7 서버의 bin/catalina.sh 의 CATALINA_OPTS에 다음 옵션 추가하고 재기동 해주면 해결! 

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