diff --git a/Cargo.toml b/Cargo.toml index 0146f21..4a53d2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,18 +9,18 @@ repository = "https://github.com/InstantDomain/instant-epp" [features] default = ["rustls"] -rustls = ["tokio-rustls"] +rustls = ["tokio-rustls", "rustls-native-certs"] [dependencies] async-trait = "0.1.52" celes = "2.1" chrono = { version = "0.4.23", features = ["serde"] } instant-xml = { version = "0.3", features = ["chrono"] } +rustls-native-certs = { version = "0.6.3", optional = true } serde = { version = "1.0", features = ["derive"] } tokio = { version = "1.0", features = ["io-util", "net", "time"] } tokio-rustls = { version = "0.24", optional = true } tracing = "0.1.29" -webpki-roots = "0.24" [dev-dependencies] regex = "1.5" diff --git a/src/client.rs b/src/client.rs index fa64efc..43f2379 100644 --- a/src/client.rs +++ b/src/client.rs @@ -221,7 +221,7 @@ mod rustls_connector { use tokio::net::lookup_host; use tokio::net::TcpStream; use tokio_rustls::client::TlsStream; - use tokio_rustls::rustls::{ClientConfig, OwnedTrustAnchor, RootCertStore, ServerName}; + use tokio_rustls::rustls::{ClientConfig, RootCertStore, ServerName}; use tokio_rustls::TlsConnector; use tracing::info; @@ -241,13 +241,13 @@ mod rustls_connector { identity: Option<(Vec, PrivateKey)>, ) -> Result { let mut roots = RootCertStore::empty(); - roots.add_server_trust_anchors(webpki_roots::TLS_SERVER_ROOTS.0.iter().map(|ta| { - OwnedTrustAnchor::from_subject_spki_name_constraints( - ta.subject, - ta.spki, - ta.name_constraints, - ) - })); + for cert in rustls_native_certs::load_native_certs()? { + roots + .add(&tokio_rustls::rustls::Certificate(cert.0)) + .map_err(|err| { + Box::new(err) as Box + })?; + } let builder = ClientConfig::builder() .with_safe_defaults()