@@ -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,16 +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- // This helps when both the tls-ring and tls-aws-lc-rs features are enabled,
501- // otherwise some crypto operations would panic because rustls can't determine
502- // a default provider.
503- // `ring` is enabled by the `tls-ring` feature, which is included in the `server` feature,
504- // which is required for the main.rs binary. Therefore, this does not need any feature flags.
505- rustls:: crypto:: ring:: default_provider ( )
506- . install_default ( )
507- . expect ( "failed to set default crypto provider" ) ;
508-
509500 let cli = Cli :: parse ( ) ;
510501 let mut cfg = Config :: load ( & cli) . await ?;
511502 if cfg. enable_quic_addr_discovery && cfg. tls . is_none ( ) {
@@ -544,12 +535,11 @@ async fn maybe_load_tls(
544535 let Some ( ref tls) = cfg. tls else {
545536 return Ok ( None ) ;
546537 } ;
547- let server_config = rustls:: ServerConfig :: builder_with_provider ( std:: sync:: Arc :: new (
548- rustls:: crypto:: ring:: default_provider ( ) ,
549- ) )
550- . with_safe_default_protocol_versions ( )
551- . expect ( "protocols supported by ring" )
552- . 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 ( ) ;
553543 let ( cert_config, server_config) = match tls. cert_mode {
554544 CertMode :: Manual => {
555545 let cert_path = tls. cert_path ( ) ;
@@ -576,10 +566,14 @@ async fn maybe_load_tls(
576566 . contact
577567 . clone ( )
578568 . std_context ( "LetsEncrypt needs a contact email" ) ?;
579- let config = AcmeConfig :: new ( vec ! [ hostname. clone( ) ] )
580- . contact ( [ format ! ( "mailto:{contact}" ) ] )
581- . cache_option ( Some ( DirCache :: new ( tls. cert_dir ( ) ) ) )
582- . 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 ) ;
583577 let state = config. state ( ) ;
584578 let resolver = state. resolver ( ) . clone ( ) ;
585579 let server_config = server_config. with_cert_resolver ( resolver) ;
@@ -628,6 +622,7 @@ async fn maybe_load_tls(
628622 cert : cert_config,
629623 server_config,
630624 quic_bind_addr : tls. quic_bind_addr ( cfg) ,
625+ crypto_provider,
631626 } ) )
632627}
633628
0 commit comments