결재승인 요청 중 ssl 인증서 로그 발생으로 문의드립니다.
현재 클라우드환경에서 운영 서비스 준비중인 상태로
서비스Pod (http 요청) -> proxy-server(http 요청) -> web nginx(https 요청) -> api.tosspayments.com으로 api 요청을 보내는 구조로
proxy-server 내에서 openssl을 사용중인 상태에서 confirm을 보냈을때
[PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] 출력되는데 따로 인증서 등록이 필요한지하여
문의 드립니다.
11 Replies
https://discord.com/channels/864296203746803753/1347064460929536030/1347079325622603807
위 링크 혹은 아래 Sectigo 사 문서를 참조해서 인증서를 등록하시기 바랍니다.
Sectigo® Official
SSL Certificates | Web Site Security
Leading provider of SSL/TLS certificates, automated certificate management and website security solutions. Trusted by the world’s largest brands for 20+ years.
인증서 문제 아니면 TLS 문제 둘중 하나입니다.
java 이용중이신가요?
java 맞으시면 jdk버전, 웹서버 종류와 웹서버 버전정보를 회신부탁드립니다.
다른환경이면 사용언어를 회신부탁드립니다.
nginx에서 location으로 따로 처리만 진행한거라 jdk는 설치되어있지않습니다.
네 그럼 openssl s_client -connect api.tosspayments.com:443 -showcerts
을 실행해서 SSL session 에서 출력되는 TLS 버전과 cipher suite 공유부탁드립니다.
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384 해당 내용으로 출력됩니다.
네 이쪽은 문제 없어보입니다. 혹시 프록시 환경이라서 위 명령어 실행시 나온 인증서 CN이
Certificate chain
0 s:/CN=*.tosspayments.com
i:/CN=Toss Payments Co., Ltd Forward Trust CA
이것이 아니고, 다른 도메인으로 나오는지 확인가능하실까요?
네 CN값이 CN=Kubernetes Ingress Controller Fake Certificate로 출력되네요
네 프록시등에서 SSL 인젝션을 통해 프록시 서버의 인증서로 대체가 된것 같습니다.
Kubernetes Ingress Controller(NGINX, Kong, Traefik 등)는 HTTPS 엔드포인트를 설정할 때 TLS Secret이 지정되지 않으면,
임시용 self-signed 인증서를 생성해 연결 테스트가 가능하도록 합니다.
그 인증서의 기본 발급자(CN)가
CN=Kubernetes Ingress Controller Fake Certificate Root CA
로 되어 있습니다.
이건 실제 외부 신뢰기관(Amazon, DigiCert 등)의 인증서 체인에 포함되지 않으며,
브라우저나 Java 클라이언트는 절대 신뢰하지 않습니다그래서 PKIX path building failed 에러가 납니다.
실제 통신을 하는 url의 발급기관 도메인의 인증서가 다운로드 되도록 , 인프라쪽 설정을 한번 체크해보시면 될것 같습니다.
감사합니다!
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.