Skip to content

Certificate trust

The chain the certificate check reads is validated the way a browser would:

  • a path from the leaf, through the intermediates the server sent, to a root in Mozilla’s root store (the webpki-roots crate);
  • every certificate within its validity period, right now;
  • the leaf valid for the host name you checked, and for server authentication.
Trust Trusted certificate (trusted)
Chains to GTS Root R4 and is valid for cloudflare.com until 2026-12-04T23:29:33Z.
trust.verdict Meaning
trusted Valid for this name, chains to a Mozilla root
expired A certificate in the chain is past its notAfter
not-yet-valid A certificate isn’t valid yet (or this machine’s clock is wrong)
name-mismatch The leaf doesn’t cover the host name
untrusted-root The chain doesn’t reach a Mozilla root: a private CA, or a missing intermediate
self-signed The leaf signs itself
unverifiable The chain uses a signature pqdoctor can’t verify, e.g. ML-DSA or SLH-DSA (no public root uses them yet)

When several apply, verdict is the most important one (issuer first, then time, then name) and problems lists them all.

Checked against badssl.com on 2026-10-15: expired., wrong.host., self-signed. and untrusted-root.badssl.com each got their verdict, and sha256.badssl.com was trusted (an RSA chain to ISRG Root X1).

  • TLS 1.3 servers: the chain comes from the certificate check, which decrypts the server’s first flight. No extra connection.
  • TLS 1.2-only servers: the Certificate message is plaintext, so one TLS 1.2 hello reads it, up to ServerHelloDone, and hangs up.
  • Signatures are checked with rustls-webpki and pure-Rust code (the RustCrypto p256, p384 and rsa crates and ed25519-dalek): ECDSA P-256 / P-384, RSA PKCS#1 v1.5 and PSS (2048–8192 bits), and Ed25519. No C crypto library is linked.
  • There is no revocation check. No OCSP or CRL request is made, so the check stays handshake-only.

The result is the report’s trust field. The pqdoctor crate’s trust feature (on by default) builds it; pqdoctor on Workers is built without it.