use std::sync::Arc;
use postgres_rustls::MakeTlsConnector;
use rustls::{ClientConfig, RootCertStore};
pub fn make_tls_connector() -> MakeTlsConnector {
let mut roots = RootCertStore::empty();
roots.extend(webpki_roots::TLS_SERVER_ROOTS.iter().cloned());
let provider = Arc::new(rustls::crypto::aws_lc_rs::default_provider());
let client_config = ClientConfig::builder_with_provider(provider)
.with_safe_default_protocol_versions()
.expect("safe default protocol versions are available")
.with_root_certificates(roots)
.with_no_client_auth();
MakeTlsConnector::new(tokio_rustls::TlsConnector::from(Arc::new(client_config)))
}
#[cfg(test)]
mod tests {
use super::*;
use tokio_postgres::tls::MakeTlsConnect;
#[test]
fn connector_is_constructible_and_cloneable() {
let connector = make_tls_connector();
let mut cloned = connector.clone();
assert!(
<MakeTlsConnector as MakeTlsConnect<tokio::net::TcpStream>>::make_tls_connect(
&mut cloned,
"invalid..domain"
)
.is_err()
);
}
}