Database ( DB )/Database

MS SQL - 오류 : PKIX path building failed

노루아부지 2022. 10. 22. 00:04

목차

  1. PKIX path building failed 에러 메시지
  2. PKIX path building failed 원인
  3. PKIX path building failed 해결 방법

 

PKIX path building failed 에러 메시지

com.microsoft.sqlserver.jdbc.SQLServerException: 드라이버가 SSL(Secure Sockets Layer) 암호화를 사용하여 SQL Sever로 보안 연결을 설정할 수 없습니다. 오류: "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target".

 

PKIX path building failed 원인

이 오류의 원인은 Database에 연결할 때 java 1.8.0_291 버전부터 보안적인 이슈로 TLS 1.0과 TLS 1.1을 비활성 했기 때문입니다.

 

 

PKIX path building failed 해결 방법

이 문제는 TLS1.2 이상을 사용하거나, java.security 파일에 접근하여 TLSv1, TLSv1.1 을 제거하면 됩니다. 또는 Database url에 인증서를 무시할 수 있는 옵션을 추가하면 됩니다.

 

1) java.security에서 TLSv1, TLSv1.1 을 제거

  1.  java 설치 경로 밑의 security/java.security 파일을 open.
  2. TLSv1 검색하여 jdk.tls.disabledAlgorithms 라고 적혀있는 부분을 찾는다.
  3. TLSv1와 TLSv1.1를 삭제한다.
    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

 

 

2) Database 연결 시, 인증서 무시 옵션 추가

이 방법은 Microsoft의 공식 문서에서 그 답을 찾을 수 있습니다.

 

encrypt 속성이 true로 설정되고 trustServerCertificate 속성이 true 로 설정되어 있는 경우 SQL Server용 Microsoft JDBC Driver는 SQL Server TLS 인증서의 유효성을 검사하지 않습니다.

 

따라서 다음과 같이 설정합니다.

spring.datasource.url=jdbc:sqlserver://주소;databaseName=db이름;encrypt=true;trustServerCertificate=true

 

여기서 중요한점은 Microsoft 공식 문서에는 "integratedSecurity" 값이 true로 되어있지만 실제로는 속성 값을 false로 주거나 옵션 자체를 지워야 한다는 것입니다.
integratedSecurity 속성은 SQL 서버 보안 인증을 사용하지 않고 윈도우 인증을 사용해서 SQL 서버에 연결 한다는 뜻 입니다. 즉, 이 옵션을 true로 주면 윈도우 자격 증명을 하기 위해서 사용자 이름과 패스워드도 명시해야 합니다.

728x90
loading