본문 바로가기
공부/프로그래밍

[spring, mssql, sqlserver] 접속에러 (TLS10)

by demonic_ 2021. 5. 28.
반응형

The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

 

직역해보면

서버에서 선택한 프로토콜 버전 TLS10이 클라이언트 기본 설정에서 허용되지 않습니다. [TLS13, TLS12]

 

라는 의미다.

 

풀 에러메세지를 보면 다음과 같다.

Failed to obtain JDBC Connection; nested exception is 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:a410f5b4-c8ed-4028-a2b9-37c2c2d970b7

 

참고로 현재 설치된 컴퓨터의 OS는 Mac 이며, Java version은 11 다. OpenJDK를 설치했을때 본 에러였다.

openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

 

버전에 문제가 있는듯 한데 인터넷에 검색하니 다행히도 AWS에도 Java 11 에 비슷한 에러가 있는듯 하다. 원인은 다음처럼 설명되어 있다.

OpenJDK will be disabling TLS 1.0 and 1.1 availability by default in the security.properties file. Java applications using TLS to communicate will need to use TLS 1.2 or above to establish a connection. The change will apply to at least OpenJDK 8u292 onward, OpenJDK 11.0.11 onward, and all versions of OpenJDK 16, following the JRE and JDK Crypto Roadmap published by Oracle.

 

OpenJDK 는 security.properties 파일에서 기본적으로 TLS 1.0 및 1.1을 비활성화 한다는 의미다. 그래서 TLS 1.2 이상을 써야하며 이는 ORACLE에서 게시한 OpenJDK 8u292 버전부터 모두 적용되어있다 한다.

 

그렇다고 해서 해결을 못하느냐 싶으면 다행히 아래 해결법이 있었다.

 

java.security 파일안에 jdk.tls.disabledAlgorithms 에서 TLSv1, TLSv1.1 을 제거하면 된다고 한다. 그럼 저 파일이 어디있는가? Mac 경우 다음 위치에 있다.

/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/conf/security  

 

안에 보면 java.security 파일이 있다.(윈도우는 자바가 설치된 폴더의 jre에 있다고 본거 같은데 정확히 모르겠음)

 

java.security 파일을 열어 다음을 찾는다.

...
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
...

 

여기서 TLSv1, TLSv1.1 을 제거한다

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

 

이제 다시 실행해보면 해당 에러가 사라졌다.

 

 

끝.

 

 

참고:

https://aws.amazon.com/ko/blogs/opensource/tls-1-0-1-1-changes-in-openjdk-and-amazon-corretto/

 

반응형

댓글