aboutsummaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/config.rs37
1 files changed, 14 insertions, 23 deletions
diff --git a/src/config.rs b/src/config.rs
index 9bb6928..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_pemfile::{certs, pkcs8_private_keys};
+use rustls_pemfile as pemfile;
use crate::{args::CliArgs, auth::RequiredAuth};
@@ -163,31 +163,22 @@ impl MiniserveConfig {
let key_file = &mut BufReader::new(
File::open(&tls_key).context(format!("Couldn't access TLS key {:?}", tls_key))?,
);
- let cert_chain = match rustls_pemfile::read_one(cert_file) {
- Ok(item) => match item {
- Some(item) => match item {
- rustls_pemfile::Item::X509Certificate(item) => item,
- _ => return Err(anyhow!("Certfile is not a X509Certificate")),
- },
- None => {
- return Err(anyhow!(
- "Certfile does not contain any recognized certificates"
- ))
- }
- },
- _ => return Err(anyhow!("Could not read certfile")),
- };
- let mut keys =
- pkcs8_private_keys(key_file).map_err(|_| anyhow!("Couldn't load private key"))?;
+ 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_default_cipher_suites()
- .with_safe_default_kx_groups()
- .with_safe_default_protocol_versions()
- .unwrap()
+ .with_safe_defaults()
.with_no_client_auth()
.with_single_cert(
- vec![rustls::Certificate(cert_chain)],
- rustls::PrivateKey(keys.remove(0)),
+ cert_chain.into_iter().map(rustls::Certificate).collect(),
+ rustls::PrivateKey(key),
)?;
Some(server_config)
} else {