@@ -18,6 +18,7 @@ use iroh_relay::{
1818 DEFAULT_HTTP_PORT , DEFAULT_HTTPS_PORT , DEFAULT_METRICS_PORT , DEFAULT_RELAY_QUIC_PORT ,
1919 } ,
2020 server:: { self as relay, ClientRateLimit , QuicConfig } ,
21+ tls:: CaRootsConfig ,
2122} ;
2223use n0_error:: { Result , StdResultExt , bail_any} ;
2324use n0_future:: FutureExt ;
@@ -496,14 +497,6 @@ async fn main() -> Result<()> {
496497 . with ( EnvFilter :: from_default_env ( ) )
497498 . init ( ) ;
498499
499- // Install `ring` as default crypto provider for rustls.
500- // `ring` is enabled by the `tls-ring` feature, which is included in the `server`
501- // feature, which is required for the main.rs binary.
502- // Therefore, this does not need any feature flags.
503- rustls:: crypto:: ring:: default_provider ( )
504- . install_default ( )
505- . expect ( "failed to set default crypto provider" ) ;
506-
507500 let cli = Cli :: parse ( ) ;
508501 let mut cfg = Config :: load ( & cli) . await ?;
509502 if cfg. enable_quic_addr_discovery && cfg. tls . is_none ( ) {
@@ -542,12 +535,11 @@ async fn maybe_load_tls(
542535 let Some ( ref tls) = cfg. tls else {
543536 return Ok ( None ) ;
544537 } ;
545- let server_config = rustls:: ServerConfig :: builder_with_provider ( std:: sync:: Arc :: new (
546- rustls:: crypto:: ring:: default_provider ( ) ,
547- ) )
548- . with_safe_default_protocol_versions ( )
549- . expect ( "protocols supported by ring" )
550- . with_no_client_auth ( ) ;
538+ let crypto_provider = Arc :: new ( rustls:: crypto:: ring:: default_provider ( ) ) ;
539+ let server_config = rustls:: ServerConfig :: builder_with_provider ( crypto_provider. clone ( ) )
540+ . with_safe_default_protocol_versions ( )
541+ . expect ( "protocols supported by ring" )
542+ . with_no_client_auth ( ) ;
551543 let ( cert_config, server_config) = match tls. cert_mode {
552544 CertMode :: Manual => {
553545 let cert_path = tls. cert_path ( ) ;
@@ -574,10 +566,14 @@ async fn maybe_load_tls(
574566 . contact
575567 . clone ( )
576568 . std_context ( "LetsEncrypt needs a contact email" ) ?;
577- let config = AcmeConfig :: new ( vec ! [ hostname. clone( ) ] )
578- . contact ( [ format ! ( "mailto:{contact}" ) ] )
579- . cache_option ( Some ( DirCache :: new ( tls. cert_dir ( ) ) ) )
580- . directory_lets_encrypt ( tls. prod_tls ) ;
569+ let client_config = CaRootsConfig :: default ( ) . client_config ( crypto_provider. clone ( ) ) ?;
570+ let config = AcmeConfig :: new_with_client_tls_config (
571+ vec ! [ hostname. clone( ) ] ,
572+ Arc :: new ( client_config) ,
573+ )
574+ . contact ( [ format ! ( "mailto:{contact}" ) ] )
575+ . cache_option ( Some ( DirCache :: new ( tls. cert_dir ( ) ) ) )
576+ . directory_lets_encrypt ( tls. prod_tls ) ;
581577 let state = config. state ( ) ;
582578 let resolver = state. resolver ( ) . clone ( ) ;
583579 let server_config = server_config. with_cert_resolver ( resolver) ;
@@ -626,6 +622,7 @@ async fn maybe_load_tls(
626622 cert : cert_config,
627623 server_config,
628624 quic_bind_addr : tls. quic_bind_addr ( cfg) ,
625+ crypto_provider,
629626 } ) )
630627}
631628
0 commit comments