(ssl_config: &Ssl)
| 81 | } |
| 82 | |
| 83 | fn load_rustls_config(ssl_config: &Ssl) -> rustls::ServerConfig { |
| 84 | rustls::crypto::aws_lc_rs::default_provider() |
| 85 | .install_default() |
| 86 | .unwrap(); |
| 87 | |
| 88 | // init server config builder with safe defaults |
| 89 | let config = ServerConfig::builder().with_no_client_auth(); |
| 90 | |
| 91 | // load TLS key/cert files |
| 92 | let cert_file = &mut BufReader::new(File::open(&ssl_config.cert_file).unwrap_or_else(|_| { |
| 93 | eprintln!( |
| 94 | "Failed to open certificate file: {}", |
| 95 | ssl_config.key_file.display() |
| 96 | ); |
| 97 | std::process::exit(1); |
| 98 | })); |
| 99 | let key_file = &mut BufReader::new(File::open(&ssl_config.key_file).unwrap_or_else(|_| { |
| 100 | eprintln!("Failed to open key file: {}", ssl_config.key_file.display()); |
| 101 | std::process::exit(1); |
| 102 | })); |
| 103 | |
| 104 | // convert files to key/cert objects |
| 105 | let cert_chain = certs(cert_file) |
| 106 | .collect::<Result<Vec<_>, _>>() |
| 107 | .unwrap_or_else(|_| { |
| 108 | eprintln!("Failed to parse certificate chain."); |
| 109 | std::process::exit(1); |
| 110 | }); |
| 111 | let mut keys = pkcs8_private_keys(key_file) |
| 112 | .map(|key| key.map(PrivateKeyDer::Pkcs8)) |
| 113 | .collect::<Result<Vec<_>, _>>() |
| 114 | .unwrap_or_else(|_| { |
| 115 | eprintln!("Failed to parse private keys."); |
| 116 | std::process::exit(1); |
| 117 | }); |
| 118 | |
| 119 | // exit if no keys could be parsed |
| 120 | if keys.is_empty() { |
| 121 | eprintln!("Could not locate PKCS 8 private keys."); |
| 122 | std::process::exit(1); |
| 123 | } |
| 124 | |
| 125 | config.with_single_cert(cert_chain, keys.remove(0)).unwrap() |
| 126 | } |
no test coverage detected