Skip to content

Commit 32ed81c

Browse files
committed
chore: replace rustls-pemfile with rustls-pki-types
1 parent 1cbf029 commit 32ed81c

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ tokio-tungstenite = { version = "0.21", optional = true }
4040
percent-encoding = "2.1"
4141
pin-project = "1.0"
4242
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "tls12", "ring"], optional = true }
43-
rustls-pemfile = { version = "2.0", optional = true }
4443

4544
[dev-dependencies]
4645
pretty_env_logger = "0.5"
@@ -56,7 +55,7 @@ listenfd = "1.0"
5655
default = ["multipart", "websocket"]
5756
multipart = ["multer"]
5857
websocket = ["tokio-tungstenite"]
59-
tls = ["tokio-rustls", "rustls-pemfile"]
58+
tls = ["tokio-rustls"]
6059

6160
# Enable compression-related filters
6261
compression = ["compression-brotli", "compression-gzip"]

src/tls.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
1212
use futures_util::ready;
1313
use hyper::server::accept::Accept;
1414
use hyper::server::conn::{AddrIncoming, AddrStream};
15+
use tokio_rustls::rustls::pki_types::{self, pem::PemObject};
1516
use tokio_rustls::rustls::server::WebPkiClientVerifier;
1617
use tokio_rustls::rustls::{Error as TlsError, RootCertStore, ServerConfig};
1718

@@ -173,7 +174,7 @@ impl TlsConfigBuilder {
173174

174175
pub(crate) fn build(mut self) -> Result<ServerConfig, TlsConfigError> {
175176
let mut cert_rdr = BufReader::new(self.cert);
176-
let cert = rustls_pemfile::certs(&mut cert_rdr)
177+
let cert = pki_types::CertificateDer::pem_reader_iter(&mut cert_rdr)
177178
.collect::<Result<Vec<_>, _>>()
178179
.map_err(|_e| TlsConfigError::CertParseError)?;
179180

@@ -188,14 +189,15 @@ impl TlsConfigBuilder {
188189

189190
let mut key_opt = None;
190191
let mut key_cur = std::io::Cursor::new(key_vec);
191-
for item in rustls_pemfile::read_all(&mut key_cur)
192-
.collect::<Result<Vec<_>, _>>()
192+
while let Some((kind, data)) = pki_types::pem::from_buf(&mut key_cur)
193193
.map_err(|_e| TlsConfigError::InvalidIdentityPem)?
194194
{
195-
match item {
196-
rustls_pemfile::Item::Pkcs1Key(k) => key_opt = Some(k.into()),
197-
rustls_pemfile::Item::Pkcs8Key(k) => key_opt = Some(k.into()),
198-
rustls_pemfile::Item::Sec1Key(k) => key_opt = Some(k.into()),
195+
use pki_types::{pem::SectionKind, PrivateKeyDer};
196+
197+
match kind {
198+
SectionKind::PrivateKey => key_opt = Some(PrivateKeyDer::Pkcs8(data.into())),
199+
SectionKind::RsaPrivateKey => key_opt = Some(PrivateKeyDer::Pkcs1(data.into())),
200+
SectionKind::EcPrivateKey => key_opt = Some(PrivateKeyDer::Sec1(data.into())),
199201
_ => return Err(TlsConfigError::UnknownPrivateKeyFormat),
200202
}
201203
}
@@ -209,9 +211,12 @@ impl TlsConfigBuilder {
209211
) -> Result<RootCertStore, TlsConfigError> {
210212
let trust_anchors = {
211213
let mut reader = BufReader::new(trust_anchor);
212-
rustls_pemfile::certs(&mut reader)
214+
pki_types::CertificateDer::pem_reader_iter(&mut reader)
213215
.collect::<Result<Vec<_>, _>>()
214-
.map_err(TlsConfigError::Io)?
216+
.map_err(|e| match e {
217+
pki_types::pem::Error::Io(e) => TlsConfigError::Io(e),
218+
_ => TlsConfigError::CertParseError,
219+
})?
215220
};
216221

217222
let mut store = RootCertStore::empty();

0 commit comments

Comments
 (0)