|
7 | 7 |
|
8 | 8 | use std::net::{Ipv4Addr, SocketAddr}; |
9 | 9 | use std::sync::Arc; |
10 | | -use std::{env, fs, io}; |
| 10 | +use std::{env, io}; |
11 | 11 |
|
12 | 12 | use http::{Method, Request, Response, StatusCode}; |
13 | 13 | use http_body_util::{BodyExt, Full}; |
14 | 14 | use hyper::body::{Bytes, Incoming}; |
15 | 15 | use hyper::service::service_fn; |
16 | 16 | use hyper_util::rt::{TokioExecutor, TokioIo}; |
17 | 17 | use hyper_util::server::conn::auto::Builder; |
18 | | -use pki_types::{CertificateDer, PrivateKeyDer}; |
| 18 | +use rustls::pki_types::pem::PemObject; |
| 19 | +use rustls::pki_types::{CertificateDer, PrivateKeyDer}; |
19 | 20 | use rustls::ServerConfig; |
20 | 21 | use tokio::net::TcpListener; |
21 | 22 | use tokio_rustls::TlsAcceptor; |
@@ -48,9 +49,12 @@ async fn run_server() -> Result<(), Box<dyn std::error::Error + Send + Sync>> { |
48 | 49 | let addr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port); |
49 | 50 |
|
50 | 51 | // Load public certificate. |
51 | | - let certs = load_certs("examples/sample.pem")?; |
| 52 | + let certs = CertificateDer::pem_file_iter("examples/sample.pem")? |
| 53 | + .collect::<Result<Vec<_>, _>>() |
| 54 | + .map_err(|e| error(format!("could not read certificate file: {e}")))?; |
52 | 55 | // Load private key. |
53 | | - let key = load_private_key("examples/sample.rsa")?; |
| 56 | + let key = PrivateKeyDer::from_pem_file("examples/sample.rsa") |
| 57 | + .map_err(|e| error(format!("could not read private key file: {e}")))?; |
54 | 58 |
|
55 | 59 | println!("Starting to serve on https://{addr}"); |
56 | 60 |
|
@@ -114,25 +118,3 @@ async fn echo(req: Request<Incoming>) -> Result<Response<Full<Bytes>>, hyper::Er |
114 | 118 | }; |
115 | 119 | Ok(response) |
116 | 120 | } |
117 | | - |
118 | | -// Load public certificate from file. |
119 | | -fn load_certs(filename: &str) -> io::Result<Vec<CertificateDer<'static>>> { |
120 | | - // Open certificate file. |
121 | | - let certfile = |
122 | | - fs::File::open(filename).map_err(|e| error(format!("failed to open {filename}: {e}")))?; |
123 | | - let mut reader = io::BufReader::new(certfile); |
124 | | - |
125 | | - // Load and return certificate. |
126 | | - rustls_pemfile::certs(&mut reader).collect() |
127 | | -} |
128 | | - |
129 | | -// Load private key from file. |
130 | | -fn load_private_key(filename: &str) -> io::Result<PrivateKeyDer<'static>> { |
131 | | - // Open keyfile. |
132 | | - let keyfile = |
133 | | - fs::File::open(filename).map_err(|e| error(format!("failed to open {filename}: {e}")))?; |
134 | | - let mut reader = io::BufReader::new(keyfile); |
135 | | - |
136 | | - // Load and return a single private key. |
137 | | - rustls_pemfile::private_key(&mut reader).map(|key| key.unwrap()) |
138 | | -} |
0 commit comments