Skip to content

webpki-ccadb: add V5 certificate records - #130

Open
elichai wants to merge 1 commit into
rustls:mainfrom
elichai:ccadb-v5-records
Open

webpki-ccadb: add V5 certificate records#130
elichai wants to merge 1 commit into
rustls:mainfrom
elichai:ccadb-v5-records

Conversation

@elichai

@elichai elichai commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

The first thing necessary in order to make rustls-platform-verifier use this crate in order to build a list of all CRLs
This uses https://www.ccadb.org/resources "All Certificate Information Reports" V5.
It cannot be merged with the existing endpoint as they return different things where the V5 endpoint can return "duplicate" certificate fingerprints(e.g. one for a root cert and one for an intermediate cert), e.g.:

"Asseco Data Systems S.A.","A010457","Certum Trusted Network CA 2","A000061","Asseco Data Systems S.A.","Root Certificate","","Not Included","Not Included","Removed","Not Yet Included","Apple: Not Included; Google Chrome: Not Included; Microsoft: Removed; Mozilla: Not Yet Included","","9F8B05137F20ACDE9B996410F4D0BF7971A1006DC99E094C346D279B93CFF7AE","","2011.10.06","2046.10.06","","tqFUOQLDoD+Oirz61PgcptE6Dv0=","false","","","","","","","","","","Ernst & Young, LLP","Poland","false","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=84a61b66-db2a-4a62-a227-ea3624e52f3e","WebTrust","2026.04.27","2025.02.11","2026.02.10","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=55c7a16e-283a-4bf2-8e88-3f716fff5cea","WebTrust","2026.04.03","2025.02.11","2026.02.10","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=a23fcf5d-bdb5-45d3-abbb-2b230214f989","WebTrust","2026.04.03","2025.02.11","2026.02.10","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=7799eaad-dd3c-489b-9dd1-21c5c1c6046c","WebTrust","2026.04.03","2025.02.11","2026.02.10","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=c175793c-60ed-4c70-8bf7-f875050e202a","WebTrust","2026.04.03","2025.02.11","2026.02.10","https://www.cpacanada.ca/api/getPDFWebTrust?attachmentId=5071ae66-985b-4eba-81c0-ee2df7f0a57b","WebTrust","2026.04.03","2025.02.11","2026.02.10","","","","","","","https://www.certum.pl/pl/cert_wiedza_repozytorium_pl_en/","false","https://www.certum.eu/en/wp-content/uploads/2025/11/Certification-Policy-of-Certum-Certification-Services_v5.2.pdf","2025.12.01","false","https://www.certum.eu/en/wp-content/uploads/2026/05/Certification-Practice-Statement-of-Certum-Certification-Services_v8.4.pdf","2026.06.01","false","https://repository.certum.pl/cp-cps-tls/certum-cp-cps-tls-certificates-en-1-0-1.pdf","2026.07.20","false","","","","","","False","True","False","False","Polska"
"Asseco Data Systems S.A.","A003934","Certum Trusted Network CA 2","A000815","Certum Trusted Network CA 2","Intermediate Certificate","","Not Trusted","Not Trusted","Not Trusted","Not Trusted","Apple: Included; Google Chrome: Included; Microsoft: Included; Mozilla: Included","Revoked","9F8B05137F20ACDE9B996410F4D0BF7971A1006DC99E094C346D279B93CFF7AE","B676F2EDDAE8775CD36CB0F63CD1D4603961F49E6265BA013A2F0307B6D0B804","2011.10.06","2046.10.06","","tqFUOQLDoD+Oirz61PgcptE6Dv0=","false","","","","[""http://crl.certum.pl/ctnca2.crl""]","","","","","","","","true","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","true","","","true","","","false","","","false","","","","","","False","False","False","False","Polska"

The plan is to use this in rustls-platform-verifier tests in order to keep an up-to-date CRL list.
Based on: rustls/rustls-platform-verifier#221 (comment)

I will create a follow-up PR in rustls-platform-verifier in the following days, showing how this is used

Comment thread webpki-ccadb/src/lib.rs
// Returns an ordered BTreeMap of the root certificates, keyed by the SHA256 fingerprint of the
// certificate. Panics if there are any duplicate fingerprints.
pub async fn fetch_ccadb_roots() -> BTreeMap<String, CertificateMetadata> {
fn ccadb_client() -> reqwest::Client {

@djc djc Aug 11, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracting this should be in a separate commit (or PR), and this function should be at the bottom of the module. If we're going to do this, I suggest we wrap the reqwest::Client in a newtype wrapper to avoid exposing reqwest in our public API.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, just note that ccadb_client is a private function :) so reqwest is not publicly exposed

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh, fair, never mind about the wrapper then.

Comment thread webpki-ccadb/src/lib.rs
Comment on lines +86 to +89
/// Fetches certificate records from the CCADB All Certificate Records V5 report.
///
/// Records are returned in report order. The report can contain more than one record with the
/// same certificate fingerprint, so the result is not keyed by fingerprint.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC this CSV API is deprecated in favor of a new REST API? Worth checking whether that applies to this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants