본문 바로가기
FullStack/21. Java

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

by nakanara 2021. 9. 10.
반응형

개발 시점에 서버에 Java 설치 후 JDBC Driver를 사용하여 데이터베이스에 연결하고 있었는데
어느 정도 시점이 지난 후에 다른 서버에 yum으로 새로 설치하고 테스트하였을 때 DB 연결 부문에서 오류가 발생했다.

$ java -version

자바 버전을 확인하였을 때 1.8이지만 패치 버전이 달랐다.

기존 서버 버전

openjdk version "1.8.0_222-ea" 
OpenJDK Runtime Environment (build 1.8.0_222-ea-b03)
OpenJDK 64-Bit Server VM (build 25.222-b03, mixed mode)

신규 서버 버전

openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

주 버전은 동일 하지만 패치버전이 좀 달랐는데 큰 차이가 없을 것이라고 생각했던 것이 큰 실수였다.

오류 내용

DB 연결 중 SSL 관련 오류가 발생하였다.

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]"
java.sql.SQLInvalidAuthorizationSpecException: SSL Connection is required. Please specify SSL options and retry.

관련 내용

해당 내용에 대해 검색 중 아마존 블로그에서 유사한 내용을 찾을 수 있었다.

2021년 4월 20일부터 모든 OpenJDK 버전에서 기본적으로 TLS1.0 및 TLS1.1 가용성을 비활성화합니다.

OpenJDK의 변경 사항은 무엇입니까?

OpenJDK는 기본적으로 security.properties파일 에서 TLS 1.0 및 1.1 가용성을 비활성화합니다. TLS를 사용하여 통신하는 Java 애플리케이션은 TLS 1.2 이상을 사용하여 연결을 설정해야 합니다. 변경 사항은 Oracle에서 게시한 JRE 및 JDK 암호화 로드맵에 따라 OpenJDK 8u292 이상, OpenJDK 11.0.11 이상 및 모든 버전의 OpenJDK 16에 적용됩니다.

영향을 받는 OpenJDK 버전:

버전 릴리스 번호
오픈JDK 8 8u292 이상
오픈JDK 11 11.0.11 이상
OpenJDK 16 이상 모든 버전

처리

특정 버전부터 TLS 1.0, 1.1을 비활성화 설정이 되면서 접속이 되지 않았던 것이다.

TLS 1.0, 1.1 비활성화 옵션 제거 과정이 필요

자바 설치한 경로 아래에서 java.security 파일 확인

$ vi /usr/lib/jvm/java/jre/lib/security/java.security

jdk.tls.disabledAlgorithms 항목 검색

  • 변경 전
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

개인적으로 yum을 통하여 패키지를 관리하는 것을 좋아하는 편이지만 패치가 기존 서비스에 영향을 발생한 점은 참 애매한 것 같다. 미리미리 확인했어야 하는데 간과한 영향도 있는 것 같다.

다음부터는 조심해야겠다.

참고

#openjdk #ssl #TLSv1 #TLSv1.1

반응형