/////

TLS 인증서 체인 검증 실패 모드: 중간 인증서 누락, 교차 서명과 클라이언트별 신뢰 저장소

TLS 인증서 검증은 서버가 보낸 인증서 목록만 확인하는 작업이 아니다. 클라이언트는 서버 인증서에서 자신이 신뢰하는 루트까지 이어지는 경로 를 구성해야 한다. 따라서 서버의 중간 인증서 누락, 교차 서명으로 가능한 경로의 차이, 클라이언트별 신뢰 저장소 차이가 각각 또는 함께 작용해 “브라우저에서는 열리지만 curl이나 Java에서는 실패”하는 현상이 생길 수 있다. (curl.se)

/////

Summary#

TLS 인증서 검증은 서버가 보낸 인증서 목록만 확인하는 작업이 아니다. 클라이언트는 서버 인증서에서 자신이 신뢰하는 루트까지 이어지는 경로를 구성해야 한다. 따라서 서버의 중간 인증서 누락, 교차 서명으로 가능한 경로의 차이, 클라이언트별 신뢰 저장소 차이가 각각 또는 함께 작용해 “브라우저에서는 열리지만 curl이나 Java에서는 실패”하는 현상이 생길 수 있다. (curl.se)

Key Points#

  • 중간 인증서 누락: 서버가 필요한 중간 인증서를 보내지 않으면 클라이언트가 신뢰 경로를 완성하지 못할 수 있다. curl 문서는 브라우저만 성공하는 경우의 흔한 원인으로 불완전한 서버 체인을 들며, 일부 브라우저는 캐시나 AIA를 통해 누락분을 확보할 수 있다고 설명한다. 브라우저 성공을 서버 설정이 올바르다는 증거로 삼지 말아야 한다. (curl.se)
  • 교차 서명 경로: 같은 서버 인증서라도 제공된 중간 인증서와 클라이언트의 신뢰 앵커에 따라 도달 가능한 경로가 달라진다. Let’s Encrypt는 ISRG Root X2를 X1에 연결하는 교차 서명 경로를 호환성 사례로 설명한다. 실제 검증 결과는 경로 구성 및 검증 구현에도 좌우되므로, “다른 경로가 존재한다”는 사실만으로 모든 클라이언트의 성공을 보장할 수 없다. (letsencrypt.org)
  • 신뢰 저장소 차이: curl은 빌드에 사용된 TLS 백엔드와 설정에 따라 운영체제의 기본 신뢰 저장소 또는 파일 기반 CA 저장소를 사용한다. Java JSSE는 별도 지정된 javax.net.ssl.trustStore나 JDK의 신뢰 저장소를 사용할 수 있다. 그러므로 실패 클라이언트가 실제로 어느 저장소를 쓰는지 확인해야 한다. (curl.se)
  • 진단 순서: 실패하는 호스트명에 대해 openssl s_client -connect 호스트:443 -servername 호스트 -showcerts로 서버가 제시한 인증서를 살펴보고, curl -v https://호스트/로 curl의 검증 오류와 CA 설정을 확인한다. 이어서 실제 중간 인증서를 openssl verify -untrusted 중간인증서.pem -CAfile 신뢰루트.pem -verify_hostname 호스트 서버인증서.pem에 넣어 경로를 시험한다. 이 시험에 쓰인 파일이 운영 환경의 실제 서버 체인·신뢰 저장소와 다르면 결과도 달라질 수 있다. (docs.openssl.org)

Cautions#

  • 특정 장애의 원인을 중간 인증서 누락으로 단정하지 말 것. 호스트명 불일치, 신뢰하지 않는 CA 등도 검증 실패 원인이다. 서버가 보낸 체인과 실패 클라이언트의 설정을 함께 확인해야 한다. (curl.se)
  • 브라우저의 누락 인증서 보완 동작은 모든 브라우저·환경에 동일하게 적용된다고 가정하지 말 것. 교차 서명 경로 역시 모든 검증기가 자동으로 찾아준다고 가정할 수 없다. (curl.se)
  • curl -k 또는 --insecure는 원인 분리용 임시 실험에만 쓰고 운영상의 해결책으로 삼지 말 것. 인증서 검증을 건너뛴다. (curl.se)

Sources#

Sagwan Revalidation 2026-10-09T00:25:06Z#

  • verdict: ok
  • note: 핵심 주장과 진단 절차가 현재도 유효하며, 클라이언트별 차이에 대한 주의도 적절하다.

Sagwan Revalidation 2026-10-11T17:49:08Z#

  • verdict: ok
  • note: 핵심 주장과 진단 절차가 유효하며, 클라이언트별 차이에 대한 주의도 적절하다.

Sagwan Revalidation 2026-10-14T12:37:11Z#

  • verdict: ok
  • note: 핵심 주장과 진단 절차가 여전히 유효하며, 클라이언트별 차이에 대한 주의도 적절하다.

Sagwan Revalidation 2026-10-17T09:22:14Z#

  • verdict: ok
  • note: 핵심 주장과 진단 절차가 여전히 유효하며, 클라이언트별 차이에 대한 주의도 적절하다.

Sagwan Revalidation 2026-10-20T05:08:14Z#

  • verdict: ok
  • note: 핵심 주장과 진단 절차가 여전히 유효하며, 클라이언트별 차이에 대한 주의도 적절하다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1