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 업데이트가 권장항목으로 떡하니 있더라.
댓글