aboutsummaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/config.rs b/src/config.rs
index fda2f84..ccff7e3 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -11,7 +11,7 @@ use anyhow::{Context, Result};
use http::HeaderMap;
#[cfg(feature = "tls")]
-use rustls::internal::pemfile::{certs, pkcs8_private_keys};
+use rustls_pemfile as pemfile;
use crate::{args::CliArgs, auth::RequiredAuth};
@@ -156,7 +156,6 @@ impl MiniserveConfig {
let tls_rustls_server_config = if let (Some(tls_cert), Some(tls_key)) =
(args.tls_cert, args.tls_key)
{
- let mut server_config = rustls::ServerConfig::new(rustls::NoClientAuth::new());
let cert_file = &mut BufReader::new(
File::open(&tls_cert)
.context(format!("Couldn't access TLS certificate {:?}", tls_cert))?,
@@ -164,10 +163,23 @@ impl MiniserveConfig {
let key_file = &mut BufReader::new(
File::open(&tls_key).context(format!("Couldn't access TLS key {:?}", tls_key))?,
);
- let cert_chain = certs(cert_file).map_err(|_| anyhow!("Couldn't load certificates"))?;
- let mut keys =
- pkcs8_private_keys(key_file).map_err(|_| anyhow!("Couldn't load private key"))?;
- server_config.set_single_cert(cert_chain, keys.remove(0))?;
+ let cert_chain = pemfile::certs(cert_file).context("Reading cert file")?;
+ let key = pemfile::read_all(key_file)
+ .context("Reading private key file")?
+ .into_iter()
+ .filter_map(|item| match item {
+ pemfile::Item::RSAKey(key) | pemfile::Item::PKCS8Key(key) => Some(key),
+ _ => None,
+ })
+ .next()
+ .ok_or(anyhow!("No supported private key in file"))?;
+ let server_config = rustls::ServerConfig::builder()
+ .with_safe_defaults()
+ .with_no_client_auth()
+ .with_single_cert(
+ cert_chain.into_iter().map(rustls::Certificate).collect(),
+ rustls::PrivateKey(key),
+ )?;
Some(server_config)
} else {
None