😢서론
DB : MSSQL
JDK : zulu 11 version
OpenJDK 11버전으로 올린 후 기존 MsSql을 진행하던 프로젝트에서 아래와 같은 에러가 발생했다.
Caused by: 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]".
😎본론
🤔원인
TLS(Transport Layer Security) 전송계층보안 이라는 암호화 보안 프로토콜은 데이터 전송 간에 암호화 알고리즘을 통해 보안을 강화시켜주는 전송 기법이라고 할 수 있다.
이 TLS는 여러 버전이 존재하며, 예전 버전인 1.0과 1.1 버전의 경우 보안상의 이유로
ORACLE에서 게시한 OpenJDK 8u292 버전 이후부터 해당 버전들은 모두 비활성화가 되어 버렸다.
그렇기에 TLS 1.2이상을 사용해야하지만, 연결 하려는 DB가 TLSv1.0을 사용하려고 하여 발생하게 된 것이다.
일단 영향을 받은 OpenJDK 버전은 아래와 같다.
OpenJDK 8 - 8u292 이상
OpenJDK 11 - 11.0.11 이상
OpenJDK 16 이후 버전 - 모든 버전에 적용
🤔TLSv1.0 및 TSLv1.1 알고리즘이 비활성화 된 이유?
몇 년 전부터 업계 전문가들이 모든 SSL 버전과 취약한 버전의 TLS 프로토콜 사용을 중단할 것을 권장해 왔습니다.
TLSv1.0은 메세지 가로채기(man-in-the-middle) 공격에 취약하여
서버와 클라이언트 간에 전송되는 데이터의 무결성 및 인증을 위협합니다.
BEAST(Browser Exploit Against SSL/TLS) 공격을 통해 공격자는
TLSv1.0에서 CBC(Cipher Block Chaining) 모드 구현의 취약점을 이용하여,
두 당사자 간에 교환되는 데이터의 암호를 해독할 수 있습니다.
TLSv1.0, 1.1의 구현 중 일부는 복호화 후 잘못된 패딩 구조를 허용하기 때문에
POODLE(Padding Oracle on Downgraded Legacy Encryption)공격에도 취약합니다.
이러한 보안적 이유로 해당 버전들은 사용을 지양한다고 합니다.
😎해결방법
위와 같은 취약점 때문에 1.0과 1.1을 막아두긴 하였지만, 간단하게 1.0 1.1 버전을 활성화하여 사용할 수 있습니다.
물론 보안에 취약한 점이 있다는 것을 알기에 실서버에서 사용하는 것은 권장드리지 않습니다.
* 저는 현재 zulu 11 버전을 사용합니다. 다른 jdk 를 사용하시는 분들의 경로 앞 부분은 다를 수 있습니다.
jre가 아닌 jdk 경로로 이동하셔야 합니다.
- C:\Program Files\Zulu\zulu-11\conf\security 경로 이동
- java.security 파일 열기
- TLSv1 검색
- 아래 빨간색 글씨 삭제
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
인용 사이트
https://asyncstream.com/tutorials/java-tlsv10-not-accepted-by-client-preferences/
https://lemontia.tistory.com/1037
https://aws.amazon.com/ko/blogs/opensource/tls-1-0-1-1-changes-in-openjdk-and-amazon-corretto/
'JVM > Java' 카테고리의 다른 글
[Java]Stack 대신 Deque 사용하기 (0) | 2021.09.20 |
---|---|
[Java] HashMap. stream으로 sum하기 (0) | 2021.09.14 |
[Java] 객체[Object] List 중복된 ID 목록만 뽑기(추출) (0) | 2021.06.13 |
[Java] Random보단 SecureRandom 를 사용하자. (2) | 2021.06.06 |
[Java]Collections.emptyList() vs. new instance 어떤 차이가 있을까? (0) | 2021.06.06 |