Spring

Spring MSSQL 2014 TLS 1.2

Jundol 2021. 7. 23. 17:49

MSA 환경을 구성중이다.

대부분의 데이터는 mariaDB로 데이터를 쌓고있지만 인게임으로 아이템을 지급해줘야하는 item-service는 mssql에 물린다.

인게임팀의 개발서버는 mssql 2014 버전을 사용하고있다.

SpringBoot로 개발한 item-service는 개발작업시 jdk11로 개발했다.

DB를 연결해서 컨텍스트 로드 테스트를 돌려보니 에러가 난다.

com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 오류: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]". ClientConnectionId:aede9a17-ca85-4d52-8bff-892ac06aaa8a

MSSQL 2014 의 경우 SSMS를 통해 상세 버전을 확인해보면

12.0.4100.1

이 버전은 TLS 1.2 를 지원하지 않는다.

MSSQL 2014 의 경우 TLS 1.2 는 12.0.4219.0 버전에서부터 지원된다.

게임팀에서 사용중인 개발서버여서 함부로 DB 핫픽스 업데이트를 진행할 수도 없다.

java.security 를 수정하면 된다고 한다. 이 방법이 옳은 방법이 아니다... 임시방편일뿐!

1. 사용하고있는 jdk의 경로를 확인하고

java -version // 사용 중인 자바의 버전 확인
/usr/libexec/java_home -V // 설치되어있는 자바의 버전 확인

 

2. java.security 파일을 수정한다.

// JDK11 기준 java.security 경로 (MAC)
/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/conf/security
// before
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

// after
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

 

3. 서비스를 다시 실행한다. (정상 실행) 하지만!

서비스 실행 과정중에 WARN 로그가 발생한다.

이 수작업을 서버마다 해줄순 없으니 (도커는 더 골치아프다) DB 서버의 업데이트를 해주자... 

 

 

p.s 윈도우 업데이트만 주기적으로 해줘도 저런 오류 없다. 핫픽스 찾아서 넣으려다가 혹시~ 하고 서버 제어판 - 윈도우 업데이트 에 봤더니 해당 핫픽스 빌드번호가 찍힌 DB 업데이트가 권장항목으로 떡하니 있더라.