Java Database Connection TLS 보안 이슈
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS12]
드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 오류: "The server selected protocol version TLS10 is not accepted by client preferences [TLS12]".
데이터베이스 연결할때 위와 같은 오류가 발생한다. 위 이슈는 SQL Server 대상이지만 다른 DBMS도 동일하게 발생될 수 있다. 이유는 자바 1.8.0_291 버전부터 보안적인 이슈로 TLS 1.0, TLS 1.1 을 비활성화되었기 때문이다.
참고: 당장 설정으로 할 수 없고 해결하려면 낮은 버전의 자바 바이너리를 받아 구동시킬 수 있다.
해결 방법
자바 버전이 1.8.0_291 이상인 버전인지 확인한다.
$ java -version
$ vi JAVA_HOME/jre/lib/security/java.security
# AS-IS
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
# TO-BE
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
비활성화된 TLSv1, TLSv1.1 을 제거한다.
이후 정상적으로 연결은 되지만 아래와 같은 경고가 출력된다.
TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.
이슈를 해결하기 위해서는 Server TLSv1.2 방식으로 변경해야 한다.
- MySQL: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-mysql.html
- SQL Server: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-sqlserver.html
- mariadb: https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/ssl-certificate-rotation-mariadb.html
'Tech' 카테고리의 다른 글
HTTP 클라이언트 테스트를 위한 WireMock - Test MockServer (0) | 2021.10.08 |
---|---|
OpenFegin Example (0) | 2021.10.07 |
QueryDSL for Spring Data JPA (0) | 2021.10.06 |
Spring RestDocs 작성 가이드 #2 응용편 - 보일러플레이트 코드 제거 (0) | 2021.09.14 |