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-rootscrate); - 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.Verdicts
Section titled “Verdicts”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,p384andrsacrates anded25519-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.