sha-256

1 개의 포스트

cloudflare

인증서 투명성 모니터링이 이제 정식 출시되었습니다 (새 탭에서 열림)

Cloudflare는 Certificate Transparency(CT) 모니터링에서 자사가 발급한 정상적인 인증서 갱신까지 알림으로 보내던 문제를 해결했다. 이제 Cloudflare가 관리·발급한 인증서는 자동으로 필터링하고, 외부에서 발급된 예상치 못한 인증서만 알림을 보낸다. 이를 위해 인증서 발급 초기부터 최종 인증서까지 유지되는 공개키 기반 식별자 `spki_sha256`를 사용한다. ## CT 모니터링의 알림 과다 문제 - CT 모니터링은 고객 도메인에 새로운 TLS 인증서가 공개 CT 로그에 등장하면 이메일을 보낸다. - 이 기능은 잘못 발급된 인증서를 조기에 발견하는 데 유용하지만, Cloudflare가 고객을 대신해 발급하는 인증서도 모두 알림 대상이었다. - Universal SSL, Advanced Certificate Manager, Total TLS, Backup Certificate 등의 정상적인 발급·갱신이 반복적으로 CT 로그에 기록된다. - 기존 인증서는 최대 60일마다 갱신될 수 있으며, 2029년에는 최대 유효기간이 47일로 줄어들 예정이라 정상 갱신 알림은 더욱 늘어날 수 있다. - 결과적으로 중요한 외부 인증서 발급 알림이 정상적인 갱신 알림에 묻히거나, 사용자가 기능을 꺼버리는 문제가 발생했다. ## 인증서 관리 시스템과 CT 알림 시스템의 단절 - 인증서 발급 시스템은 내부 발급 정보를 관리하고, CT 알림 시스템은 공개 CT 로그를 읽어 알림을 생성한다. - 두 시스템은 같은 인증서를 다루지만 처리 시점과 보유 정보가 다르다. - CT 알림 시스템이 로그를 확인하는 순간에는 해당 인증서가 Cloudflare 발급인지 알려주는 발급 시스템의 정보가 없었다. - 따라서 “이 인증서가 Cloudflare가 발급한 것인가?”를 판단할 연결 고리가 필요했다. ## 사전 인증서와 최종 인증서의 처리 순서 - 하나의 인증서 발급은 일반적으로 다음 두 단계로 CT 로그에 기록된다. - CA가 사전 인증서(pre-certificate)를 생성하고 로그에 기록한다. - SCT(Signed Certificate Timestamp)를 최종 인증서에 포함한 뒤 최종 인증서를 다시 로그에 기록한다. - 하나의 발급 요청에 대해 두 개의 로그 항목이 생기므로, Cloudflare는 `stripped_fingerprint`를 사용해 중복 알림을 방지했다. - `stripped_fingerprint`는 DER로 인코딩된 TBSCertificate의 해시이며, 사전 인증서와 최종 인증서 쌍을 식별하는 데 적합하다. - 그러나 발급 시스템은 사전 인증서를 받지 않기 때문에 이 값을 발급 초기에 계산할 수 없다. - 사전 인증서가 먼저 로그에 기록되는 짧은 시간 동안에는 발급 시스템 데이터베이스에 해당 fingerprint가 없어, Cloudflare가 발급한 인증서임에도 알림이 발생할 수 있었다. ## 공개키 기반 식별자 선택 새 식별자는 다음 조건을 만족해야 했다. - CT 로그에 기록되기 전에 생성될 것 - 사전 인증서와 최종 인증서 전반에서 동일할 것 - CT 알림 시스템이 로그 정보만으로 다시 계산할 수 있을 것 - 인증서 발급 요청마다 고유할 것 이 조건을 만족하는 값으로 인증서의 공개키가 선택됐다. - 공개키는 `SubjectPublicKeyInfo(SPKI)` 구조 안에 포함된다. - 키 생성 시점부터 CSR, 사전 인증서, 최종 인증서까지 동일하게 유지된다. - Cloudflare는 발급마다 새로운 키 쌍을 생성하므로 공개키는 사실상 발급 요청마다 고유하다. - 개인키는 Cloudflare만 보유하므로, 동일한 공개키를 가진 유효한 인증서는 Cloudflare 발급 과정에서 나온 것으로 판단할 수 있다. - Cloudflare는 DER 인코딩된 SPKI를 SHA-256으로 해시한 `spki_sha256` 값을 사용한다. ## `spki_sha256`를 이용한 알림 필터링 - 인증서 발급 시스템은 CSR에서 `spki_sha256`를 계산해 키 생성 시점에 데이터베이스에 저장한다. - CT 알림 시스템은 CT 로그에서 인증서를 발견하면 공개키로 동일한 `spki_sha256`를 다시 계산한다. - 이후 발급 시스템 데이터베이스에서 해당 값을 조회한다. - 값이 있으면 Cloudflare가 발급한 인증서로 간주하고 알림을 억제한다. - 값이 없으면 외부 발급 인증서로 간주하고 기존처럼 알림을 보낸다. - 사전 인증서와 최종 인증서의 공개키가 동일하므로 어느 항목이 먼저 처리되더라도 일관되게 판단할 수 있다. ## 필터링 적용 결과 - Cloudflare가 관리하는 Universal SSL, Advanced Certificate Manager, Total TLS, Backup Certificate는 정상적으로 알림에서 제외된다. - 사전 인증서만 로그에 남고 최종 발급이 중단된 경우에도 Cloudflare 발급 기록과 일치하므로 불필요한 알림이 발생하지 않는다. - 사용자가 직접 업로드한 커스텀 인증서는 Cloudflare가 키를 생성하지 않았으므로 발급 시스템에 일치하는 키 기록이 없다. - 따라서 외부에서 관리되는 커스텀 인증서나 예상치 못한 인증서 발급은 계속 알림 대상이다. Cloudflare의 개선은 정상적인 내부 인증서 갱신을 제거하면서도 외부 발급 인증서는 놓치지 않도록 해 CT 모니터링의 신호 대 잡음비를 높인 사례다. 사용자는 알림을 끄기보다, 이제 실제로 확인할 가치가 있는 인증서 발급 이벤트를 중심으로 대응할 수 있다.