개발 시점에 서버에 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
'FullStack > 21. Java' 카테고리의 다른 글
Maven 란 (0) | 2022.02.15 |
---|---|
Java 11 변경 내용 (0) | 2022.01.01 |
[UTIL] String 템플릿 + Map 결합하여 문자열 생성 (0) | 2021.09.07 |
[Oracle] JDBC 변경 후 - Could not commit with auto-commit set on (0) | 2021.06.21 |
[Java] 다양한 싱글톤 생성 방법 (0) | 2021.05.10 |