Log instead of error MissingOrMalformedExtensions in rustls_native_certs::load_native_certs (#1316)
This commit is contained in:
@@ -346,12 +346,31 @@ impl ClientBuilder {
|
|||||||
|
|
||||||
#[cfg(feature = "rustls-tls-native-roots")]
|
#[cfg(feature = "rustls-tls-native-roots")]
|
||||||
if config.tls_built_in_root_certs {
|
if config.tls_built_in_root_certs {
|
||||||
|
let mut valid_count = 0;
|
||||||
|
let mut invalid_count = 0;
|
||||||
for cert in rustls_native_certs::load_native_certs()
|
for cert in rustls_native_certs::load_native_certs()
|
||||||
.map_err(crate::error::builder)?
|
.map_err(crate::error::builder)?
|
||||||
{
|
{
|
||||||
root_cert_store
|
let cert = rustls::Certificate(cert.0);
|
||||||
.add(&rustls::Certificate(cert.0))
|
// Continue on parsing errors, as native stores often include ancient or syntactically
|
||||||
.map_err(crate::error::builder)?
|
// invalid certificates, like root certificates without any X509 extensions.
|
||||||
|
// Inspiration: https://github.com/rustls/rustls/blob/633bf4ba9d9521a95f68766d04c22e2b01e68318/rustls/src/anchors.rs#L105-L112
|
||||||
|
match root_cert_store.add(&cert) {
|
||||||
|
Ok(_) => valid_count += 1,
|
||||||
|
Err(err) => {
|
||||||
|
invalid_count += 1;
|
||||||
|
log::warn!(
|
||||||
|
"rustls failed to parse DER certificate {:?} {:?}",
|
||||||
|
&err,
|
||||||
|
&cert
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if valid_count == 0 && invalid_count > 0 {
|
||||||
|
return Err(crate::error::builder(
|
||||||
|
"zero valid certificates found in native root store",
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user