Parsing a PEM Chain
use x509_parser::pem::Pem;
pub fn parse_pem_chain(pem_data: &str) -> anyhow::Result<Vec<X509Certificate>> {
let mut certs = Vec::new();
for pem in Pem::iter_from_buffer(pem_data.as_bytes()) {
let pem = pem?;
if pem.label == "CERTIFICATE" {
let (_, cert) = X509Certificate::from_der(&pem.contents)?;
certs.push(cert);
}
}
Ok(certs)
}
Chain order convention: leaf first, root last (TLS wire format).