Programming/Linux

PKIX path building failed 오류 해결

마실개 2022. 12. 20. 20:22
반응형

어느날 업무중 외부 API 연동이 끊겨 로그를 조회해보니 해당 오류가 발생하였다.

 

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

원인은 외부기관 https:// 의 통신 시 인증서가 우리 서버에 신뢰하는 인증 기관 목록에 없다는 내용이다.

바로 외부기관에 연락 해보니 인증서 갱신을 했다고 한다.

 

리눅스 서버로 연동 후 데이터를 받아오는 형식으로 리눅스(Centos 6) 의 환경에서 아래 명령어들을 통해 해결하였다.

 

 

https:// 통신 서버 SSL인증서 추출 방법

$ openssl s_client -connect www.OOOOO.kr:443  |tee certlog

해당 URL의 인증서를 certlog 파일에 저장 처리.

URL 입력시 https:// 를 제거 해주자. (계층과 관련있다고 한다)

 

$ openssl x509 -inform PEM -in certlog -text -out certdata

certlog 파일 내 인증서 부분만 추출

 

$ openssl x509 -inform PEM -text -in certdata

제대로 추출되었는지 인증서 파싱해서 출력 확인

 

$ cat certdata >> /etc/pki/tls/certs/ca-bundle.crt

파싱된 서버인증서인 certdata 파일의 내용을 ca-bundle.crt에 추가한다. 

회사에선 cat 명령어가 root 계정만 권한만 허용되는 경우가 있다.

root 계정으로 변경 후 처음 부터 다시 실행해야 한다.

 

cat 명령어 대신 수정할 수 있는 방법은 ca-bundle.crt 파일을 메모장 형식 또는 텍스트에디터로 연 뒤

맨 아래 부분에 해당 인증서 내용을 추가하면 된다.

추가할 인증서 내용은 아래 부분의 형식을 그대로 복사 붙여넣기 하면 된다.

-----BEGIN CERTIFICATE-----
내용 생략...
-----END CERTIFICATE-----

 

혹은 vi 명령어로 편집모드로 들어간 뒤 i 를 누르고 해당 내용을 붙여넣기 하면 된다.

$ vi /etc/pki/tls/certs/ca-bundle.crt

 

 

 

이와 같은 방법으로도 연동이 안된다면 서버 인증서 외 체인 인증서, 루트 인증서 모두 교체해야된다.

아래는 3개의 인증서를 교체성공한 포스팅이다.

https://biesil.tistory.com/56

 

 

반응형