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 Version | SSL/TLS Default | Other 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