@@ -3,6 +3,7 @@ use std::{path::PathBuf, sync::Arc};
33use clap:: { Args , Parser } ;
44use http_mitm_proxy:: { DefaultClient , MitmProxy , hyper:: service:: service_fn, moka:: sync:: Cache } ;
55use hyper_util:: rt:: { TokioExecutor , TokioIo } ;
6+ use rustls_pki_types:: pem:: PemObject ;
67use tokio:: net:: TcpListener ;
78use tokio_rustls:: {
89 TlsAcceptor ,
@@ -27,7 +28,7 @@ struct ExternalIssuer {
2728 private_key : PathBuf ,
2829}
2930
30- fn make_root_issuer ( ) -> rcgen:: Issuer < ' static , rcgen:: KeyPair > {
31+ fn make_root_issuer ( ) -> ( rcgen:: Issuer < ' static , rcgen:: KeyPair > , Vec < u8 > ) {
3132 let mut params = rcgen:: CertificateParams :: default ( ) ;
3233
3334 params. distinguished_name = rcgen:: DistinguishedName :: new ( ) ;
@@ -59,7 +60,7 @@ fn make_root_issuer() -> rcgen::Issuer<'static, rcgen::KeyPair> {
5960 println ! ( "Private key" ) ;
6061 println ! ( "{}" , signing_key. serialize_pem( ) ) ;
6162
62- rcgen:: Issuer :: new ( params, signing_key)
63+ ( rcgen:: Issuer :: new ( params, signing_key) , cert . der ( ) . to_vec ( ) )
6364}
6465
6566#[ tokio:: main]
@@ -71,18 +72,24 @@ async fn main() {
7172 . with_line_number ( true )
7273 . init ( ) ;
7374
74- let root_issuer = if let Some ( external_issuer) = opt. external_issuer {
75+ let ( root_issuer, cert_der ) = if let Some ( external_issuer) = opt. external_issuer {
7576 // Use existing key
7677 let signing_key = rcgen:: KeyPair :: from_pem (
7778 & std:: fs:: read_to_string ( & external_issuer. private_key ) . unwrap ( ) ,
7879 )
7980 . unwrap ( ) ;
8081
81- rcgen:: Issuer :: from_ca_cert_pem (
82- & std:: fs:: read_to_string ( & external_issuer. cert ) . unwrap ( ) ,
83- signing_key,
82+ let cert_pem = std:: fs:: read_to_string ( & external_issuer. cert ) . unwrap ( ) ;
83+ let cert = rustls_pki_types:: CertificateDer :: from_pem_slice ( cert_pem. as_bytes ( ) ) . unwrap ( ) ;
84+
85+ (
86+ rcgen:: Issuer :: from_ca_cert_pem (
87+ & std:: fs:: read_to_string ( & external_issuer. cert ) . unwrap ( ) ,
88+ signing_key,
89+ )
90+ . unwrap ( ) ,
91+ cert. to_vec ( ) ,
8492 )
85- . unwrap ( )
8693 } else {
8794 make_root_issuer ( )
8895 } ;
@@ -91,9 +98,7 @@ async fn main() {
9198 let mut server_config = ServerConfig :: builder ( )
9299 . with_no_client_auth ( )
93100 . with_single_cert (
94- vec ! [ CertificateDer :: from(
95- root_issuer. key( ) . public_key_raw( ) . to_vec( ) ,
96- ) ] ,
101+ vec ! [ CertificateDer :: from( cert_der) ] ,
97102 rustls:: pki_types:: PrivateKeyDer :: Pkcs8 ( PrivatePkcs8KeyDer :: from (
98103 root_issuer. key ( ) . serialize_der ( ) ,
99104 ) ) ,
0 commit comments