Skip to content
Control Plane Labs

Certificate Transparency explained for devs

The plain-English explanation of Certificate Transparency logs — what they contain, who runs them, and why they matter for every domain you own or ship code to.

Ben Ennis

Published July 27, 2026

If you have ever wondered how someone can list every subdomain a company owns without ever hitting their DNS — or how you would find out that a certificate authority (CA) issued a cert for your domain that you did not request — the answer is Certificate Transparency. It is the closest thing the web has to a public ledger of TLS-adjacent identity events, and it is required infrastructure for every publicly-trusted certificate issued since April 2018.

This article walks through what CT actually is, how the log architecture works, what a CT log entry contains, and the day-to-day operational uses that make CT worth understanding even if you never touch a certificate authority yourself.

Why Certificate Transparency exists

Certificate Transparency was proposed by Ben Laurie, Adam Langley, and Emilia Kasper at Google in 2013 in response to a series of misissuance incidents. In particular, in 2011 DigiNotar was compromised and issued rogue certificates for *.google.com that were then used against Iranian users; DigiNotar was subsequently distrusted by every major browser and went bankrupt within months (Mozilla security blog).

The design goal of CT is straightforward: make certificate misissuance detectable, not just preventable. If every certificate a browser trusts has to appear in a public log, then the certificate you did not ask for cannot hide from you.

The mechanism was standardized as RFC 6962 in June 2013 and superseded by the version-2 draft draft-ietf-trans-rfc6962-bis. Since April 2018, Chrome requires that every publicly-trusted certificate be accompanied by evidence of inclusion in at least two independent CT logs, or the certificate is rejected — the “CT Policy” enforcement described in the Chrome CT policy documentation. Apple (Safari CT policy) enforces a similar requirement in Safari.

How a CT log is structured

A CT log is an append-only Merkle tree of certificate entries. That sounds like buzzword bingo but is actually a small idea: each new entry is hashed together with the running head of the tree, producing a “signed tree head” (STH) that proves the log has not been rewritten. The full model is documented in RFC 6962 §2.

The three actors are:

  • The CA that issues a certificate. Before the cert is used, the CA submits it (or, more commonly, a pre-certificate) to one or more CT logs.
  • The log operator — historically Google, Cloudflare, Let’s Encrypt, DigiCert, Sectigo, and TrustAsia among others. The log operator signs a Signed Certificate Timestamp (SCT) proving the certificate was accepted.
  • The client — usually a browser — verifies that the certificate it is about to accept carries valid SCTs from qualified logs.

What a CT entry actually contains

A single CT log entry is the DER-encoded X.509 certificate (or pre-certificate) plus the log’s signed metadata. When you fetch a log entry through the log’s get-entries API described in RFC 6962 §4.6, you get back the raw certificate; from there you extract:

  • Subject — the identity the cert was issued to. For domain-validated (DV) certs this is usually just the common name.
  • Subject Alternative Names (SANs) — every DNS name the cert covers. This is the field that makes CT so useful for reconnaissance and inventory: if your CA issued a cert for internal.dev.example.com, that hostname is now public.
  • Issuer — the CA that issued the cert.
  • Not-before and not-after — the validity window. Since March 2026, publicly-trusted certificates are capped at 200 days (CA/Browser Forum Ballot SC081v3), down from the previous 398-day cap.
  • Serial number — unique per CA, stable per cert.
  • SHA-256 fingerprint — the identity most tools index on.

What CT does not tell you

CT is deliberately narrow. It tells you a certificate was issued. It does not tell you:

  • Whether the certificate is currently in use. Certificates can be issued and never deployed, or deployed and revoked. Revocation is tracked via CRL or OCSP, not CT.
  • What IP or CDN the domain resolves to. For that you need DNS.
  • Whether the certificate is trusted by every browser. Some certificates end up in CT logs and are still distrusted for other reasons (name constraints, incorrect key type, path length).

Practical operational uses

The interesting thing about CT is that once you accept the constraint that every publicly-trusted certificate must be logged, a set of operational habits becomes possible:

Domain inventory

Query CT for every certificate issued to a domain you own. You get an authoritative list of subdomains that had certificates issued — usually a superset of the subdomains you thought were in production. The CT lookup tool on this site is one way to do this; the canonical open-source tool is crt.sh, operated by Sectigo.

Misissuance detection

Set up a nightly job that queries CT for your domain and diffs against a last-known-good set of certificate fingerprints. Any unknown fingerprint is a lead — usually a benign cert issued by another team in your org, occasionally a legitimate misissuance you need to report to the CA.

Vendor and supply-chain due diligence

Look up the CT history for a vendor’s domain before you sign a contract. A vendor whose CT history is dozens of certificates from three CAs, expiring on different cadences, with a mix of DV, OV, and EV, is probably running an ad-hoc PKI. That does not mean don’t sign — it means know what you are signing.

Subdomain enumeration for security research

Bug-bounty and offensive-security researchers use CT as their first-choice reconnaissance tool because it is authoritative and read-only. There is no scan traffic, no rate limit worth speaking of, and no way for the target to detect the query. Guidance from the OWASP Web Security Testing Guide suggests CT as a standard reconnaissance step.

Common gotchas

Pre-certificates vs. certificates. When a CA submits to a CT log before the certificate is issued, they submit a pre-certificate — a not-yet-signed certificate with a poison extension. CT logs return both pre-certs and final certs, so counts can look doubled. The CT log monitoring guide from Cloudflare walks through this in more detail.

Certificate authority migrations. When a CA is distrusted or a company switches CAs, cert counts spike and pattern changes. That is normal, not an incident.

CT is not GDPR-exempt. Because SANs can include email-address hostnames (rare but legal) or first-name-lastname subdomains that identify an individual, CT contains personal data. The European Data Protection Board opinion on CT is that public interest outweighs the individual privacy risk, but it is worth being aware of if your domain naming convention exposes employee identities.

How Control Plane Labs uses CT

Two tools on this site are backed by CT data:

If you want the underlying data programmatically, the CertIndex API is documented at ctindex.io/docs and offers a generous free tier for occasional lookups plus paid tiers for continuous monitoring.

The bottom line

Certificate Transparency is one of the quiet successes of modern web infrastructure. It has effectively eliminated the class of misissuance attacks that motivated its creation. It has also become one of the most useful sources of read-only asset intelligence anyone can query — which cuts both ways, so if you are running a domain, be aware that every certificate you issue is public, and configure your naming accordingly.

Frequently asked questions

Do private certificates end up in CT logs?+
No. Only publicly-trusted certificates that browsers will accept are logged. Internal CAs (Active Directory Certificate Services, HashiCorp Vault PKI, an internal ACME CA) do not submit to CT because their certs are not publicly trusted.
How quickly does a new certificate show up in CT logs?+
Usually within seconds of issuance. Certificate authorities submit to logs as part of the issuance process, so the SCT is embedded in the cert itself before the CA hands it to you.
Which CT logs matter for browser trust?+
Chrome maintains an authoritative list at chromium.googlesource.com/chromium/src. Apple and Mozilla maintain similar lists. As of this writing, Google, Cloudflare, Let's Encrypt, DigiCert, Sectigo, and TrustAsia all operate qualified logs.
Can I remove a certificate from a CT log?+
No. CT logs are append-only by design. If a certificate you did not want to be public ends up in a CT log, the correct remediation is to revoke the certificate and rename the underlying resource — not to try to remove the log entry.
How does CT interact with the 200-day cert lifetime rule?+
The March 2026 cap of 200 days on publicly-trusted certificates (CA/Browser Forum Ballot SC081v3) means CT log volume roughly doubles at each cadence step. That's a scaling concern for log operators, not for you as a consumer of the logs — expect more entries, not different structure.

Tags: #tls, #certificate-transparency, #security, #acme