@@ -17,7 +17,7 @@ use rustls::pki_types::{CertificateDer, ServerName};
1717use rustls:: server:: { Accepted , Acceptor , ProducesTickets } ;
1818use rustls:: {
1919 CipherSuite , ClientConfig , ClientConnection , Connection , HandshakeKind , ProtocolVersion ,
20- RootCertStore , ServerConfig , SignatureScheme , SupportedProtocolVersion ,
20+ ServerConfig , SignatureScheme , SupportedProtocolVersion ,
2121} ;
2222
2323use not_thread_safe:: NotThreadSafe ;
@@ -416,7 +416,6 @@ pub struct SslContext {
416416 raw_options : u64 ,
417417 verify_mode : VerifyMode ,
418418 verify_depth : c_int ,
419- verify_roots : RootCertStore ,
420419 verify_x509_store : x509:: OwnedX509Store ,
421420 alpn : Vec < Vec < u8 > > ,
422421 default_cert_file : Option < PathBuf > ,
@@ -447,7 +446,6 @@ impl SslContext {
447446 raw_options : 0 ,
448447 verify_mode : VerifyMode :: default ( ) ,
449448 verify_depth : -1 ,
450- verify_roots : RootCertStore :: empty ( ) ,
451449 verify_x509_store : OwnedX509Store :: default ( ) ,
452450 alpn : vec ! [ ] ,
453451 default_cert_file : None ,
@@ -624,12 +622,7 @@ impl SslContext {
624622 & mut self ,
625623 certs : Vec < CertificateDer < ' static > > ,
626624 ) -> Result < ( ) , error:: Error > {
627- for c in certs {
628- self . verify_roots
629- . add ( c)
630- . map_err ( error:: Error :: from_rustls) ?;
631- }
632- Ok ( ( ) )
625+ self . verify_x509_store . add ( certs)
633626 }
634627
635628 fn get_x509_store ( & self ) -> * mut X509_STORE {
@@ -735,8 +728,8 @@ struct Ssl {
735728 mode : ConnMode ,
736729 verify_mode : VerifyMode ,
737730 verify_depth : c_int ,
738- verify_roots : RootCertStore ,
739731 verify_server_name : Option < ServerName < ' static > > ,
732+ verify_x509_store : x509:: OwnedX509Store ,
740733 alpn : Vec < Vec < u8 > > ,
741734 alpn_callback : callbacks:: AlpnCallbackConfig ,
742735 cert_callback : callbacks:: CertCallbackConfig ,
@@ -776,8 +769,8 @@ impl Ssl {
776769 mode : inner. method . mode ( ) ,
777770 verify_mode : inner. verify_mode ,
778771 verify_depth : inner. verify_depth ,
779- verify_roots : Self :: load_verify_certs ( inner) ?,
780772 verify_server_name : None ,
773+ verify_x509_store : Self :: load_verify_certs ( inner) ?,
781774 alpn : inner. alpn . clone ( ) ,
782775 alpn_callback : inner. alpn_callback . clone ( ) ,
783776 cert_callback : inner. cert_callback . clone ( ) ,
@@ -1027,7 +1020,7 @@ impl Ssl {
10271020
10281021 let provider = Arc :: new ( provider:: default_provider ( ) ) ;
10291022 let verifier = Arc :: new ( verifier:: ServerVerifier :: new (
1030- self . verify_roots . clone ( ) . into ( ) ,
1023+ self . verify_x509_store . clone ( ) ,
10311024 provider. clone ( ) ,
10321025 self . verify_mode ,
10331026 & self . verify_server_name ,
@@ -1112,7 +1105,7 @@ impl Ssl {
11121105 let provider = Arc :: new ( provider:: default_provider ( ) ) ;
11131106 let verifier = Arc :: new (
11141107 verifier:: ClientVerifier :: new (
1115- self . verify_roots . clone ( ) . into ( ) ,
1108+ & self . verify_x509_store ,
11161109 provider. clone ( ) ,
11171110 self . verify_mode ,
11181111 )
@@ -1435,20 +1428,20 @@ impl Ssl {
14351428 }
14361429 }
14371430
1438- fn load_verify_certs ( ctx : & SslContext ) -> Result < RootCertStore , error:: Error > {
1439- let mut verify_roots = ctx. verify_roots . clone ( ) ;
1440-
1431+ fn load_verify_certs ( ctx : & SslContext ) -> Result < x509:: OwnedX509Store , error:: Error > {
14411432 // If verify_roots isn't empty then it was configured with `SSL_CTX_load_verify_file`
14421433 // or `SSL_CTX_load_verify_dir` and we should use it as-is.
1443- if !ctx. verify_roots . is_empty ( ) {
1444- return Ok ( verify_roots ) ;
1434+ if !ctx. verify_x509_store . is_empty ( ) {
1435+ return Ok ( ctx . verify_x509_store . clone ( ) ) ;
14451436 }
14461437
14471438 // Otherwise, try to load the default cert file or cert dir.
1439+ let mut verify_roots = x509:: OwnedX509Store :: default ( ) ;
1440+
14481441 if let Some ( default_cert_file) = & ctx. default_cert_file {
1449- verify_roots. add_parsable_certificates ( x509:: load_certs (
1442+ verify_roots. add ( x509:: load_certs (
14501443 vec ! [ default_cert_file. to_path_buf( ) ] . into_iter ( ) ,
1451- ) ?) ;
1444+ ) ?) ? ;
14521445 } else if let Some ( default_cert_dir) = & ctx. default_cert_dir {
14531446 let entries = match fs:: read_dir ( default_cert_dir) {
14541447 Ok ( iter) => iter,
@@ -1457,7 +1450,7 @@ impl Ssl {
14571450 . filter_map ( |entry| entry. ok ( ) )
14581451 . map ( |dir_entry| dir_entry. path ( ) ) ;
14591452
1460- verify_roots. add_parsable_certificates ( x509:: load_certs ( entries) ?) ;
1453+ verify_roots. add ( x509:: load_certs ( entries) ?) ? ;
14611454 }
14621455
14631456 Ok ( verify_roots)
0 commit comments