2015년 9월, 시맨텍(Symantec) 소유의 CA가 내부 테스트 도중 google.com용 인증서를 발급했다. 구글은 공개 인증서 투명성(CT) 로그를 확인하여 이 사실을 찾아냈다.
이 글에서는 CT 로그가 무엇인지, 어디에 존재하는지, 그리고 보유 도메인에 대해 검색하는 방법을 설명한다.

CT 로그란 무엇인가
인증서 투명성(CT) 로그는 RFC 6962에 정의된 TLS 인증서의 공개 추가 전용(append-only) 목록이다.
CA는 인증서를 발급하기 전에 여러 로그에 각 인증서를 제출한다. 각 로그는 서명된 인증서 타임스탬프(Signed Certificate Timestamp, SCT)라는 서명된 영수증을 반환하며, CA는 이 영수증을 최종 인증서에 삽입한다.
로그 항목은 머클 트리(Merkle tree)에 저장되므로 누구나 항목이 삭제되거나 변경되었는지 검증할 수 있다.
브라우저는 모든 CA에 로그 기록을 강제한다
Chrome CT 정책은 서로 다른 두 운영자가 운영하는 최소 두 개의 로그에서 제공하는 SCT가 포함된 인증서만 수용한다. 유효 기간이 180일을 초과하는 인증서에는 세 개가 필요하다. Apple도 동일한 규칙을 적용한다.

이러한 영수증이 없는 인증서는 Chrome 및 Safari에서 오류가 발생한다. 따라서 CA는 공개 로그에 등록하지 않고는 특정 도메인에서 작동하는 인증서를 발급할 수 없다.
이것이 2015년 사건이 공개된 계기다. google.com 인증서를 발견한 후, 구글은 로그를 조사하여 의심스러운 인증서를 추가로 발견했다. 이후 진행된 시맨텍의 자체 감사를 통해 76개 도메인에 대해 164개의 인증서가 추가로 확인되었으며, 등록조차 되지 않은 도메인에 발급된 인증서도 2,458개나 찾아냈다.
인증서 내 SCT 확인하기
openssl 명령을 사용하면 실제 운영 중인 인증서의 SCT 영수증을 확인할 수 있다.
openssl s_client -connect pankeit.com:443 -servername pankeit.com \
</dev/null 2>/dev/null | openssl x509 -noout -dates -ext ct_precert_scts
축약된 출력 결과:
notBefore=Jun 4 00:00:00 2026 GMT
notAfter=Dec 18 23:59:59 2026 GMT
CT Precertificate SCTs:
Signed Certificate Timestamp:
Log ID : C2:31:7E:57:45:19:A3:45:...
Timestamp : Jun 4 01:08:11.347 2026 GMT
Signed Certificate Timestamp:
Log ID : D8:09:55:3B:94:4F:7A:FF:...
Timestamp : Jun 4 01:08:11.367 2026 GMT
Signed Certificate Timestamp:
Log ID : 94:4E:43:87:FA:EC:C1:EF:...
Timestamp : Jun 4 01:08:11.362 2026 GMT
각 로그 ID(Log ID)는 Chrome의 로그 목록에 있는 개별 로그를 식별한다. 위 예시의 로그 ID는 DigiCert의 Wyvern2026h2, Google의 Xenon2026h2, DigiCert의 Sphinx2026h2를 가리킨다.
로그가 위치한 곳
각 로그 레지스트리는 Google, Cloudflare, DigiCert, Sectigo, Let's Encrypt, TrustAsia 및 기타 4개 운영자가 운영하는 HTTPS 서버다.
Chrome은 수용하는 레지스트리 목록을 JSON 파일로 게시한다.
각 로그는 특정 기간을 담당한다. 예를 들어 Google의 Argon2026h2는 2026년 7월 1일부터 2027년 1월 1일 사이에 만료되는 인증서만 수용한다.
로그를 직접 조회할 수도 있다. 다음 명령은 Argon2026h2에 현재 크기를 요청한다.
curl https://ct.googleapis.com/logs/us1/argon2026h2/ct/v1/get-sth
2026년 10월 1일 기준, 해당 로그의 항목 수는 3,373,531,407개로 집계되었다.
도메인 검색하기
로그 자체에는 검색 기능이 없다. 0번 항목부터 순서대로 읽는 것만 가능하다. crt.sh 및 Cert Spotter와 같은 모니터링 도구는 모든 로그를 읽은 후 도메인 이름별로 인증서를 색인한다.
특정 도메인과 서브도메인의 모든 인증서를 확인하려면 다음 URL을 연다.
https://crt.sh/?q=%25.yourdomain.com
예시로 pankeit.com에 대해 이 검색을 실행했다.
응답에는 1년 이상의 기간에 걸쳐 3개 CA에서 발급한 14개의 항목이 포함되어 있었다. pankeit.com에 대한 CA는 Amazon, GoDaddy, Let's Encrypt였다.
대부분의 인증서는 두 번 나타난다. 한 로그 항목은 "사전 인증서(precertificate)"를 나타내고, 다른 항목은 최종 서명된 인증서를 나타내기 때문이다.
참고 자료
- IETF — RFC 6962: Certificate Transparency (2013년 6월)
- Google — Chrome Certificate Transparency Policy
- Apple — Apple의 Certificate Transparency 정책
- Google Security Blog — Improved Digital Certificate Security (2015년 9월 18일)
- Google Security Blog — Sustaining Digital Certificate Security (2015년 10월)
- Google — Chrome CT log list (v3) (2026-10-01 확인)
