SSL 인증서 적용을 위해 서버에서 TLSv1.2를 활성화 시켰고, 이후 MSSQL DB 커넥션이 안되는 문제가 있었다. 현상과 조치방법에 대해 정리해보았다.
1. 현상
Windows Server 2008 R1 / MSSQL Server 2008 R2 / IIS 7 / Tomcat 6 / Java1.7
Windows 2008 (R1) 서버에서 TLSv1.2 사용을 위해 서버에서 레지스트리 수정하여 Enable 시키는 작업을 했다. MSSQL Server 2008 R2 핫픽스, 서비스팩 3도 설치했다.
이후 Tomcat은 기동이 되나, App에서 DB 쿼리 시 아래 오류가 발생하였다. (SSMS에서는 SELECT 잘 됨)
cannot create poolableconnectionfactory (드라이버가 ssl(secure sockets layer) 암호화를 사용하여 sql sever로 보안 연결을 설정할 수 없습니다. 오류: “sun.security.validator.validatorexception: pkix path building failed: sun.security.provider.certpath.suncertpathbuilderexception: unable to find valid certification path to requested target”. clientconnectionid:73a251db-d15b- …)
2. 해결방안
많은 문서들을 읽다보니 java 1.7에서는 TLS 1.0이 기본설정이고, Java 1.8부터 TLS 1.0이 제외되고 1.2가 기본 지원되는 것을 알게되었다. 또한 DB Connection 설정에 대한 변경도 필요하다. 아래와 같이 두가지를 동시에 적용하여 해결할 수 있었다.
2.1 Java 버전 업그레이드
java 변경에 대해 영향도가 없는 것을 확인 후 1.8로 변경하였다.
- 기존: java 1.7
- 변경: java 1.8
2.2 DB 커넥션 설정 변경
DB Encrypt 옵션에 대해 아래와 같이 변경하였다.
- 기존: Globals.Url=jdbc:sqlserver://DB_IP:1433;databaseName=DBName;CharacterSet=UTF-8;
- 변경: Globals.Url=jdbc:sqlserver://DB_IP:1433;databaseName=DBName;CharacterSet=UTF-8;encrypt=true;trustServerCertificate=true;
다른 블로그들에는 DB 커넥션 설정 변경에 대해서만 가이드가 되어있는데, 아무리 해도 되질 않았다. Java 버전까지 올리고 Encrypt 설정을 하니 해결할 수 있었다.