Skip to content

Commit b9e43a5

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

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
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: 18 additions & 10 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,15 +189,19 @@ 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, pem)) = 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()),
199-
_ => return Err(TlsConfigError::UnknownPrivateKeyFormat),
195+
use pki_types::pem::SectionKind;
196+
197+
if let (
198+
SectionKind::PrivateKey | SectionKind::RsaPrivateKey | SectionKind::EcPrivateKey,
199+
key @ Some(_),
200+
) = (kind, pki_types::PrivateKeyDer::from_pem(kind, pem))
201+
{
202+
key_opt = key;
203+
} else {
204+
return Err(TlsConfigError::UnknownPrivateKeyFormat);
200205
}
201206
}
202207
let key = match key_opt {
@@ -209,9 +214,12 @@ impl TlsConfigBuilder {
209214
) -> Result<RootCertStore, TlsConfigError> {
210215
let trust_anchors = {
211216
let mut reader = BufReader::new(trust_anchor);
212-
rustls_pemfile::certs(&mut reader)
217+
pki_types::CertificateDer::pem_reader_iter(&mut reader)
213218
.collect::<Result<Vec<_>, _>>()
214-
.map_err(TlsConfigError::Io)?
219+
.map_err(|e| match e {
220+
pki_types::pem::Error::Io(e) => TlsConfigError::Io(e),
221+
_ => TlsConfigError::CertParseError,
222+
})?
215223
};
216224

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

0 commit comments

Comments
 (0)