← 블로그 목록

인증서 체인과 중간 인증서, '체인 오류'의 정체

2026-06-09 · 읽는 데 5분

인증서는 혼자 신뢰받지 않습니다. "누가 보증했는가"를 따라 올라가는 사슬(체인)이 끝까지 이어져야 브라우저가 신뢰합니다. SSLCheck에서 "체인 오류"가 뜨는 이유도 여기에 있습니다.

인증서 체인이란?

SSL 인증서는 3단계로 연결됩니다.

  • 리프 인증서(leaf): 내 도메인(example.com)에 발급된 실제 인증서
  • 중간 인증서(intermediate): 인증기관(CA)이 리프를 보증하기 위해 둔 다리 역할 인증서
  • 루트 인증서(root): 브라우저·운영체제에 미리 내장되어 "신뢰의 뿌리"가 되는 인증서

브라우저는 리프 → 중간 → 루트로 서명을 따라 올라가며 검증합니다. 루트는 이미 기기에 내장되어 있으니, 서버는 리프 + 중간을 함께 내보내야 사슬이 완성됩니다.

"체인 오류"는 보통 중간 인증서 누락

가장 흔한 원인은 중간 인증서를 빼먹고 리프만 설치한 경우입니다. 그러면 사슬이 중간에서 끊겨 루트까지 닿지 못합니다.

까다로운 점은, 어떤 기기에서는 멀쩡해 보인다는 것입니다. 크롬·일부 브라우저는 빠진 중간 인증서를 인터넷에서 알아서 가져오기도 해서, 데스크톱에서는 정상으로 보일 수 있습니다. 하지만 그 기능이 없는 환경(일부 모바일·구형 안드로이드·서버 간 통신)에서는 신뢰 오류가 납니다. "나는 잘 되는데 고객은 안 된다"는 신고가 여기서 나옵니다.

그 외 체인이 깨지는 경우

  • 도메인 불일치: 인증서의 보호 대상(SAN)에 접속한 도메인이 없음
  • 자체 서명(self-signed): 공인 CA가 아닌 직접 만든 인증서 → 브라우저가 신뢰 안 함
  • 만료·폐기: 사슬 중 하나라도 만료되면 전체가 무효

어떻게 고치나요?

인증서를 설치할 때 풀체인(fullchain) 파일을 쓰면 됩니다. Let's Encrypt의 fullchain.pem이 리프+중간을 합친 파일입니다. Nginx는 이 풀체인을 ssl_certificate에 지정합니다. 설치 후에는 외부에서 사슬이 온전한지 확인하세요.

SSLCheck는 실제 서버 응답으로 체인을 검증하고, 체인 구성(각 단계의 주체)을 도메인 상세 페이지에서 보여줍니다. 정상→실패로 바뀌면 보안 회귀 알림으로 알려드립니다.

요약

  • 체인 = 리프 → 중간 → 루트로 이어지는 신뢰의 사슬
  • "체인 오류"의 대부분은 중간 인증서 누락 (일부 기기에서만 오류라 더 위험)
  • 해결: 풀체인으로 설치하고 외부에서 검증

도메인 만료, 더 이상 직접 챙기지 마세요

SSLCheck가 만료 전에 이메일과 카카오톡으로 알려드립니다. 무료로 2개 도메인부터 시작하세요.

무료로 시작하기