Skip to content

Commit 13260f9

Browse files
committed
Drop dependency on rustls-pemfile
1 parent fcb5d66 commit 13260f9

File tree

6 files changed

+19
-56
lines changed

6 files changed

+19
-56
lines changed

Cargo.lock

Lines changed: 0 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ http = "1"
2828
hyper = { version = "1", default-features = false }
2929
hyper-util = { version = "0.1", default-features = false, features = ["client-legacy", "tokio"] }
3030
log = { version = "0.4.4", optional = true }
31-
pki-types = { package = "rustls-pki-types", version = "1" }
3231
rustls-native-certs = { version = "0.8", optional = true }
3332
rustls-platform-verifier = { version = "0.6", optional = true }
3433
rustls = { version = "0.23", default-features = false }
@@ -42,7 +41,6 @@ cfg-if = "1"
4241
http-body-util = "0.1"
4342
hyper-util = { version = "0.1", default-features = false, features = ["server-auto"] }
4443
rustls = { version = "0.23", default-features = false, features = ["tls12"] }
45-
rustls-pemfile = "2"
4644
tokio = { version = "1.0", features = ["io-std", "macros", "net", "rt-multi-thread"] }
4745

4846
[[example]]

examples/client.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ use http_body_util::{BodyExt, Empty};
77
use hyper::body::Bytes;
88
use hyper_rustls::ConfigBuilderExt;
99
use hyper_util::{client::legacy::Client, rt::TokioExecutor};
10+
use rustls::pki_types::pem::PemObject;
11+
use rustls::pki_types::CertificateDer;
1012
use rustls::RootCertStore;
1113

1214
use std::str::FromStr;
13-
use std::{env, fs, io};
15+
use std::{env, io};
1416

1517
fn main() {
1618
// Send GET request and inspect result, with proper error handling.
@@ -41,22 +43,14 @@ async fn run_client() -> io::Result<()> {
4143
}
4244
};
4345

44-
// Second parameter is custom Root-CA store (optional, defaults to native cert store).
45-
let mut ca = match env::args().nth(2) {
46-
Some(ref path) => {
47-
let f =
48-
fs::File::open(path).map_err(|e| error(format!("failed to open {path}: {e}")))?;
49-
let rd = io::BufReader::new(f);
50-
Some(rd)
51-
}
52-
None => None,
53-
};
54-
5546
// Prepare the TLS client config
56-
let tls = match ca {
57-
Some(ref mut rd) => {
47+
let tls = match env::args().nth(2) {
48+
Some(path) => {
5849
// Read trust roots
59-
let certs = rustls_pemfile::certs(rd).collect::<Result<Vec<_>, _>>()?;
50+
let certs = CertificateDer::pem_file_iter(&path)
51+
.and_then(|res| res.collect::<Result<Vec<_>, _>>())
52+
.map_err(|err| error(format!("could not read CA store {path}: {err}")))?;
53+
6054
let mut roots = RootCertStore::empty();
6155
roots.add_parsable_certificates(certs);
6256
// TLS client config using the custom CA store for lookups

examples/server.rs

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@
77
88
use std::net::{Ipv4Addr, SocketAddr};
99
use std::sync::Arc;
10-
use std::{env, fs, io};
10+
use std::{env, io};
1111

1212
use http::{Method, Request, Response, StatusCode};
1313
use http_body_util::{BodyExt, Full};
1414
use hyper::body::{Bytes, Incoming};
1515
use hyper::service::service_fn;
1616
use hyper_util::rt::{TokioExecutor, TokioIo};
1717
use hyper_util::server::conn::auto::Builder;
18-
use pki_types::{CertificateDer, PrivateKeyDer};
18+
use rustls::pki_types::pem::PemObject;
19+
use rustls::pki_types::{CertificateDer, PrivateKeyDer};
1920
use rustls::ServerConfig;
2021
use tokio::net::TcpListener;
2122
use tokio_rustls::TlsAcceptor;
@@ -48,9 +49,12 @@ async fn run_server() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
4849
let addr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port);
4950

5051
// Load public certificate.
51-
let certs = load_certs("examples/sample.pem")?;
52+
let certs = CertificateDer::pem_file_iter("examples/sample.pem")?
53+
.collect::<Result<Vec<_>, _>>()
54+
.map_err(|e| error(format!("could not read certificate file: {e}")))?;
5255
// Load private key.
53-
let key = load_private_key("examples/sample.rsa")?;
56+
let key = PrivateKeyDer::from_pem_file("examples/sample.rsa")
57+
.map_err(|e| error(format!("could not read private key file: {e}")))?;
5458

5559
println!("Starting to serve on https://{addr}");
5660

@@ -114,25 +118,3 @@ async fn echo(req: Request<Incoming>) -> Result<Response<Full<Bytes>>, hyper::Er
114118
};
115119
Ok(response)
116120
}
117-
118-
// Load public certificate from file.
119-
fn load_certs(filename: &str) -> io::Result<Vec<CertificateDer<'static>>> {
120-
// Open certificate file.
121-
let certfile =
122-
fs::File::open(filename).map_err(|e| error(format!("failed to open {filename}: {e}")))?;
123-
let mut reader = io::BufReader::new(certfile);
124-
125-
// Load and return certificate.
126-
rustls_pemfile::certs(&mut reader).collect()
127-
}
128-
129-
// Load private key from file.
130-
fn load_private_key(filename: &str) -> io::Result<PrivateKeyDer<'static>> {
131-
// Open keyfile.
132-
let keyfile =
133-
fs::File::open(filename).map_err(|e| error(format!("failed to open {filename}: {e}")))?;
134-
let mut reader = io::BufReader::new(keyfile);
135-
136-
// Load and return a single private key.
137-
rustls_pemfile::private_key(&mut reader).map(|key| key.unwrap())
138-
}

src/connector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use http::Uri;
88
use hyper::rt;
99
use hyper_util::client::legacy::connect::Connection;
1010
use hyper_util::rt::TokioIo;
11-
use pki_types::ServerName;
11+
use rustls::pki_types::ServerName;
1212
use tokio_rustls::TlsConnector;
1313
use tower_service::Service;
1414

src/connector/builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use hyper_util::client::legacy::connect::HttpConnector;
77
feature = "webpki-roots"
88
))]
99
use rustls::crypto::CryptoProvider;
10+
use rustls::pki_types::ServerName;
1011
use rustls::ClientConfig;
1112

1213
use super::{DefaultServerNameResolver, HttpsConnector, ResolveServerName};
@@ -16,7 +17,6 @@ use super::{DefaultServerNameResolver, HttpsConnector, ResolveServerName};
1617
feature = "rustls-platform-verifier"
1718
))]
1819
use crate::config::ConfigBuilderExt;
19-
use pki_types::ServerName;
2020

2121
/// A builder for an [`HttpsConnector`]
2222
///

0 commit comments

Comments
 (0)