SSL 인증서 체인이란? 작동 방식 설명

SSL 인증서 체인이란?
SSL 인증서 체인(신뢰 체인 또는 인증 경로라고도 함)은 웹사이트의 SSL/TLS 인증서를 신뢰할 수 있는 루트 인증 기관(CA)에 연결하는 디지털 인증서의 순서화된 목록입니다. 체인의 각 인증서는 상위 인증서에 의해 디지털 서명되어, 서버에서 브라우저가 이미 신뢰하는 루트 CA까지 검증 가능한 신뢰 경로를 생성합니다.
이것을 보증의 체인으로 생각하세요. 서버 인증서는 "나는 example.com입니다"라고 말합니다. 중간 CA는 "example.com의 인증서를 보증합니다"라고 말합니다. 루트 CA는 "그 중간 CA를 보증합니다"라고 말합니다. 브라우저는 이미 루트 CA를 신뢰하므로 서명 체인을 따라가면 서버도 신뢰합니다.
HTTPS 웹사이트를 방문하면 브라우저는 밀리초 단위로 이 체인을 조용히 추적합니다. 모든 링크가 확인되면 자물쇠 아이콘이 표시됩니다. 링크가 누락되었거나, 만료되었거나, 유효하지 않으면 보안 경고가 대신 표시됩니다.
인증서 체인의 세 가지 링크
대부분의 SSL 인증서 체인은 정확히 세 가지 수준을 가지고 있습니다. 각각을 이해하는 것은 HTTPS 문제를 해결하는 데 필수적입니다.
| 루트 인증서 | 중간 인증서 | 리프(서버) 인증서 | |
|---|---|---|---|
| 서명자 | 자체(자체 서명) | 루트 CA | 중간 CA |
| 위치 | 브라우저/OS 신뢰 저장소 | 서버에서 전송 | 서버에서 전송 |
| 일반적인 수명 | 20-25년 | 5-10년 | 90일 - 1년 |
| 침해 시 | 모든 인증서 무효 — 치명적 | 중간만 폐기 | 폐기 및 재발급 |
| 대략적인 수 | 전 세계 약 150개 신뢰 루트 | 수천 개 | 수억 개 |
루트 인증서
루트 인증서는 체인의 최상위에 있는 신뢰 앵커입니다. 자체 서명되어 있으며, 이는 인증 기관이 자신의 인증서에 서명했음을 의미합니다. 루트 인증서는 브라우저와 운영 체제에 사전 설치되어 있으며, 이 컬렉션을 신뢰 저장소(trust store)라고 합니다.
주요 브라우저가 기본적으로 신뢰하는 루트 CA는 약 150개입니다. DigiCert, Let's Encrypt(ISRG), Sectigo, GlobalSign 같은 조직이 루트 인증서를 운영합니다. 루트 키가 매우 중요하기 때문에 CA는 에어갭된 물리적으로 안전한 금고 안의 하드웨어 보안 모듈(HSM)에 보관합니다.
중간 인증서
중간 인증서는 루트 인증서와 서버 인증서 사이에 위치합니다. 루트 CA가 중간 인증서에 서명하고, 중간 CA가 최종 엔티티(서버) 인증서에 서명합니다. 대부분의 CA는 하나 또는 두 개의 중간 인증서를 사용합니다.
웹 서버는 TLS 핸드셰이크 중에 리프 인증서와 함께 중간 인증서를 전송해야 합니다. 루트 인증서와 달리 중간 인증서는 브라우저에 사전 설치되어 있지 않습니다. 서버가 이를 전송하지 않으면 체인이 끊어집니다.
리프 인증서(서버 인증서)
리프 인증서(최종 엔티티 인증서 또는 서버 인증서라고도 함)는 웹 서버에 설치된 인증서입니다. 도메인 이름, 공개 키, 유효 기간, 발급자 정보(서명한 중간 CA)가 포함됩니다.
이것은 TLS 핸드셰이크 중에 브라우저가 가장 먼저 받는 인증서입니다. 그런 다음 브라우저는 체인을 올라가며 신뢰할 수 있는 루트에 도달할 때까지 각 서명을 확인합니다.
신뢰 체인의 작동 방식
브라우저가 HTTPS를 통해 웹사이트에 연결하면 TLS 핸드셰이크가 밀리초 단위로 발생하는 체인 검증 프로세스를 시작합니다:
서버가 인증서 전송 — 웹 서버가 리프 인증서와 모든 중간 인증서를 브라우저에 전송합니다.
브라우저가 체인 구축 — 브라우저가 인증서를 리프 → 중간 → 루트 순서로 배열합니다. 신뢰 저장소를 확인하여 루트를 식별합니다.
서명 검증 — 리프에서 시작하여 각 인증서의 디지털 서명이 체인의 다음 인증서의 개인 키로 생성되었는지 확인합니다.
루트 조회 — 브라우저가 체인 최상위의 루트 인증서가 내장 신뢰 저장소에 있는지 확인합니다. 루트가 인식되지 않으면 검증이 실패합니다.
유효성 검사 — 체인의 모든 인증서에 대해 만료되지 않았는지, 폐기되지 않았는지(CRL 또는 OCSP를 통해), 리프 인증서의 도메인이 URL과 일치하는지 확인합니다.
검증 후 결과
모든 검사를 통과하면 브라우저가 암호화된 연결을 설정하고 자물쇠 아이콘을 표시합니다. 중간 인증서에서라도 단 하나의 검사가 실패하면 브라우저는 "연결이 비공개가 아닙니다" 또는 "NET::ERR_CERT_AUTHORITY_INVALID"와 같은 경고를 표시합니다.
이것이 리프 인증서뿐만 아니라 전체 체인이 중요한 이유입니다. 만료된 중간 인증서는 만료된 서버 인증서만큼 완전히 HTTPS를 깨뜨립니다.
중간 인증서가 존재하는 이유
루트 CA는 이론적으로 모든 서버 인증서에 직접 서명하여 중간 인증서를 완전히 건너뛸 수 있습니다. 하지만 그렇게 하지 않는 세 가지 중요한 이유가 있습니다:
보안 격리 — 루트 CA 개인 키는 물리적으로 안전한 금고 안의 HSM에서 오프라인으로 보관됩니다. 수백만 개의 개별 서버 인증서가 아닌 중간 인증서 서명에만 사용됩니다. 이로써 루트 키 침해 위험이 크게 감소합니다.
피해 억제 — 중간 CA가 침해되면 해당 중간의 인증서만 영향을 받습니다. 루트 CA는 침해된 중간을 폐기하고 새로운 것을 발급할 수 있으며, 이전에 발급한 모든 인증서를 무효화하지 않습니다.
운영 유연성 — CA는 다양한 목적에 다양한 중간을 사용합니다: DV 인증서용, EV용, 다양한 지역 또는 키 알고리즘(RSA vs ECDSA)용으로 별도의 것을 사용합니다.
SSL 인증서 체인 확인 방법
웹사이트의 인증서 체인을 검사하는 세 가지 방법이 있습니다. 명령줄 도구부터 브라우저 기반 확인까지.
방법 1: OpenSSL (명령줄)
openssl 명령은 인증서 체인을 검사하는 가장 상세한 방법입니다. 터미널에서 다음을 실행하세요:
openssl s_client -connect example.com:443 -showcerts 2>/dev/null | grep -E 's:|i:'방법 2: 브라우저 인증서 뷰어
모든 주요 브라우저에서 특별한 도구 없이 인증서 체인을 검사할 수 있습니다:
브라우저 주소 표시줄의 자물쇠 아이콘 클릭
"연결이 안전합니다" → "인증서가 유효합니다" 선택
"인증 경로" 탭(Chrome/Edge) 또는 "세부 정보" 탭(Firefox) 열기
루트(상단)에서 리프(하단)까지 전체 체인을 볼 수 있습니다
방법 3: DNS Robot SSL 검사기
웹사이트의 인증서 체인을 확인하는 가장 빠른 방법은 온라인 도구입니다. 당사의 SSL 검사기는 전체 체인, 발급자 세부 정보, 유효 기간, 검증 상태를 한 번의 클릭으로 표시합니다. 도메인을 입력하면 전체 체인을 즉시 확인할 수 있습니다.
일반적인 인증서 체인 오류 및 해결 방법
인증서 체인 문제는 HTTPS 오류의 가장 흔한 원인 중 하나입니다. 가장 자주 발생하는 오류와 각각의 해결 방법을 소개합니다.
중간 인증서 누락
오류 메시지: "unable to verify the first certificate" 또는 "incomplete certificate chain"
원인: 서버가 중간 인증서 없이 리프 인증서만 전송합니다. 데스크톱 브라우저는 이전 방문에서 캐시된 중간 인증서로 해결하기도 하지만, 모바일 브라우저와 API 클라이언트는 거의 항상 실패합니다.
해결: CA 문서에서 중간 인증서를 다운로드하여 서버의 인증서 파일에 추가합니다. Nginx에서는 하나의 파일로 연결합니다:
cat your-domain.crt intermediate.crt > fullchain.crt체인 내 자체 서명 인증서
오류 메시지: "self-signed certificate in certificate chain"
원인: 서버가 보내는 체인에 루트 인증서가 불필요하게 포함되었거나, 인증서가 실제로 자체 서명이며 신뢰할 수 있는 CA에서 발급되지 않았습니다.
해결: 서버의 체인 파일에서 루트 인증서를 제거합니다. 서버는 리프 + 중간 인증서만 전송해야 합니다. 브라우저는 이미 신뢰 저장소에 루트를 가지고 있으므로 전송이 불필요하며 이 오류의 원인이 될 수 있습니다.
잘못된 인증서 순서
오류 메시지: 체인 검증이 조용히 실패하거나 "인증서를 신뢰할 수 없음" 경고가 발생합니다.
원인: 체인 파일의 인증서 순서가 잘못되었습니다.
해결: 올바른 순서는 항상: 리프 인증서가 먼저, 그다음 리프에 가장 가까운 것부터 루트에 가장 가까운 순서로 중간 인증서를 배치합니다. 루트 인증서는 절대 포함하지 마세요.
체인 내 만료된 인증서
오류 메시지: "certificate has expired" — 하지만 리프 인증서의 만료일은 정상으로 보입니다.
원인: 체인의 중간 인증서가 만료되었습니다. 드물지만 CA가 중간 인증서를 교체할 때 발생할 수 있습니다.
해결: CA에서 최신 중간 인증서를 다운로드하여 이전 것을 교체합니다. 그런 다음 당사의 SSL 검사기를 사용하여 업데이트된 체인을 확인합니다.
인증서 체인 모범 사례
항상 중간 인증서 설치 — 브라우저가 알아서 해결할 것이라고 가정하지 마세요. 항상 서버가 전체 체인(리프 + 중간)을 보내도록 구성하세요.
루트는 보내지 마세요 — 브라우저에는 이미 루트 인증서가 있습니다. 루트를 포함하면 대역폭을 낭비하고 일부 클라이언트에서 오류가 발생할 수 있습니다.
올바른 순서 유지 — 리프가 먼저, 그다음 중간, 루트 없음. 일부 서버는 순서에 엄격합니다. 다른 서버는 허용하지만 검증이 느릴 수 있습니다.
만료 모니터링 — 중간 인증서도 만료됩니다. 알림을 설정하거나 자동 인증서 관리(Let's Encrypt의 certbot 등)를 사용하세요.
변경 후 확인 — 인증서 갱신이나 호스팅 변경 후에는 항상 당사의 SSL 검사기와 같은 도구로 체인을 확인하세요. 갱신 전에 작동하던 것이 CA가 중간을 변경한 경우 갱신 후에 작동하지 않을 수 있습니다.
OCSP 스테이플링 사용 — 서버에서 OCSP 스테이플링을 활성화하여 브라우저가 CA에 직접 연락하지 않고도 인증서 폐기 상태를 더 빠르게 확인할 수 있도록 합니다.
지금 SSL 인증서 체인을 확인하세요
DNS Robot의 무료 SSL 검사기를 사용하여 인증서 체인 검증, 만료일 확인, 발급자 세부 정보를 한 번의 클릭으로 확인하세요.
Try SSL 검사기Frequently Asked Questions
SSL 인증서 체인은 웹사이트의 SSL 인증서를 신뢰할 수 있는 루트 인증 기관(CA)에 연결하는 디지털 인증서의 순서화된 시퀀스입니다. 일반적으로 세 가지 수준을 포함합니다: 리프(서버) 인증서, 하나 이상의 중간 인증서, 브라우저가 이미 신뢰하는 루트 인증서.