Skip to content

Commit 7f65f21

Browse files
authored
Remove rustls-pemfile dependency (#5339)
2 parents 4a32ccc + 56067f9 commit 7f65f21

File tree

7 files changed

+14
-38
lines changed

7 files changed

+14
-38
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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -525,10 +525,6 @@ version = "0.16.0"
525525
[workspace.dependencies.rustls]
526526
version = "0.23.35"
527527

528-
# PEM parsing for rustls
529-
[workspace.dependencies.rustls-pemfile]
530-
version = "2.2.0"
531-
532528
# PKI types for rustls
533529
[workspace.dependencies.rustls-pki-types]
534530
version = "1.13.0"

crates/config/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ lettre.workspace = true
3030
pem-rfc7468.workspace = true
3131
rand_chacha.workspace = true
3232
rand.workspace = true
33-
rustls-pemfile.workspace = true
3433
rustls-pki-types.workspace = true
3534
schemars.workspace = true
3635
serde_json.workspace = true

crates/config/src/sections/http.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66

77
#![allow(deprecated)]
88

9-
use std::{borrow::Cow, io::Cursor};
9+
use std::borrow::Cow;
1010

1111
use anyhow::bail;
1212
use camino::Utf8PathBuf;
1313
use ipnetwork::IpNetwork;
1414
use mas_keystore::PrivateKey;
15-
use rustls_pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer};
15+
use rustls_pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer, pem::PemObject};
1616
use schemars::JsonSchema;
1717
use serde::{Deserialize, Serialize};
1818
use url::Url;
@@ -238,10 +238,8 @@ impl TlsConfig {
238238
(None, Some(path)) => Cow::Owned(std::fs::read_to_string(path)?),
239239
};
240240

241-
let mut certificate_chain_reader = Cursor::new(certificate_chain_pem.as_bytes());
242-
let certificate_chain: Result<Vec<_>, _> =
243-
rustls_pemfile::certs(&mut certificate_chain_reader).collect();
244-
let certificate_chain = certificate_chain?;
241+
let certificate_chain = CertificateDer::pem_slice_iter(certificate_chain_pem.as_bytes())
242+
.collect::<Result<Vec<_>, _>>()?;
245243

246244
if certificate_chain.is_empty() {
247245
bail!("TLS certificate chain is empty (or invalid)")

crates/listener/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ mas-context.workspace = true
3636

3737
[dev-dependencies]
3838
anyhow.workspace = true
39-
rustls-pemfile.workspace = true
4039
tokio-test.workspace = true
4140
tokio.workspace = true
4241
tracing-subscriber.workspace = true

crates/listener/examples/demo/main.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use std::{
88
convert::Infallible,
9-
io::BufReader,
109
net::{Ipv4Addr, TcpListener},
1110
sync::Arc,
1211
time::Duration,
@@ -15,7 +14,11 @@ use std::{
1514
use anyhow::Context;
1615
use hyper::{Request, Response};
1716
use mas_listener::{ConnectionInfo, server::Server};
18-
use tokio_rustls::rustls::{RootCertStore, ServerConfig, server::WebPkiClientVerifier};
17+
use tokio_rustls::rustls::{
18+
RootCertStore, ServerConfig,
19+
pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs1KeyDer, pem::PemObject},
20+
server::WebPkiClientVerifier,
21+
};
1922
use tokio_util::sync::CancellationToken;
2023
use tower::service_fn;
2124

@@ -77,31 +80,26 @@ async fn main() -> Result<(), anyhow::Error> {
7780
}
7881

7982
fn load_tls_config() -> Result<Arc<ServerConfig>, anyhow::Error> {
80-
let mut ca_cert_reader = BufReader::new(CA_CERT_PEM);
81-
let ca_cert = rustls_pemfile::certs(&mut ca_cert_reader)
83+
let ca_cert = CertificateDer::pem_slice_iter(CA_CERT_PEM)
8284
.collect::<Result<Vec<_>, _>>()
8385
.context("Invalid CA certificate")?;
8486
let mut ca_cert_store = RootCertStore::empty();
8587
ca_cert_store.add_parsable_certificates(ca_cert);
8688

87-
let mut server_cert_reader = BufReader::new(SERVER_CERT_PEM);
88-
let server_cert: Vec<_> = rustls_pemfile::certs(&mut server_cert_reader)
89+
let server_cert: Vec<_> = CertificateDer::pem_slice_iter(SERVER_CERT_PEM)
8990
.collect::<Result<Vec<_>, _>>()
9091
.context("Invalid server certificate")?;
9192

92-
let mut server_key_reader = BufReader::new(SERVER_KEY_PEM);
93-
let server_key = rustls_pemfile::rsa_private_keys(&mut server_key_reader)
94-
.next()
95-
.context("No RSA private key found")?
96-
.context("Invalid server TLS keys")?;
93+
let server_key =
94+
PrivatePkcs1KeyDer::from_pem_slice(SERVER_KEY_PEM).context("Invalid server TLS keys")?;
9795

9896
let client_cert_verifier = WebPkiClientVerifier::builder(Arc::new(ca_cert_store))
9997
.allow_unauthenticated()
10098
.build()?;
10199

102100
let mut config = ServerConfig::builder()
103101
.with_client_cert_verifier(client_cert_verifier)
104-
.with_single_cert(server_cert, server_key.into())?;
102+
.with_single_cert(server_cert, PrivateKeyDer::Pkcs1(server_key))?;
105103
config.alpn_protocols = vec![b"h2".to_vec(), b"http/1.1".to_vec()];
106104

107105
Ok(Arc::new(config))

deny.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ ignore = [
1919
# RSA key extraction "Marvin Attack". This is only relevant when using
2020
# PKCS#1 v1.5 encryption, which we don't
2121
"RUSTSEC-2023-0071",
22-
# This is a newly unmaintained package that we can allow temporarily.
23-
# Remove ASAP once https://github.com/element-hq/matrix-authentication-service/issues/5337 is fixed.
24-
"RUSTSEC-2025-0134",
2522
]
2623

2724
[licenses]

0 commit comments

Comments
 (0)