@@ -7,7 +7,7 @@ use std::time::Duration;
7
7
use std:: { cmp, env} ;
8
8
9
9
use crates_io:: { NewCrate , NewCrateDependency , Registry } ;
10
- use curl:: easy:: { Easy , InfoType , SslOpt } ;
10
+ use curl:: easy:: { Easy , InfoType , SslOpt , SslVersion } ;
11
11
use failure:: { bail, format_err} ;
12
12
use log:: { log, Level } ;
13
13
use percent_encoding:: { percent_encode, NON_ALPHANUMERIC } ;
@@ -413,12 +413,14 @@ pub fn needs_custom_http_transport(config: &Config) -> CargoResult<bool> {
413
413
let cainfo = config. get_path ( "http.cainfo" ) ?;
414
414
let check_revoke = config. get_bool ( "http.check-revoke" ) ?;
415
415
let user_agent = config. get_string ( "http.user-agent" ) ?;
416
+ let ssl_version = config. get_string ( "http.ssl-version" ) ?;
416
417
417
418
Ok ( proxy_exists
418
419
|| timeout
419
420
|| cainfo. is_some ( )
420
421
|| check_revoke. is_some ( )
421
- || user_agent. is_some ( ) )
422
+ || user_agent. is_some ( )
423
+ || ssl_version. is_some ( ) )
422
424
}
423
425
424
426
/// Configure a libcurl http handle with the defaults options for Cargo
@@ -438,6 +440,21 @@ pub fn configure_http_handle(config: &Config, handle: &mut Easy) -> CargoResult<
438
440
handle. useragent ( & version ( ) . to_string ( ) ) ?;
439
441
}
440
442
443
+ if let Some ( ssl_version) = config. get_string ( "http.ssl-version" ) ? {
444
+ let version = match ssl_version. val . as_str ( ) {
445
+ "default" => SslVersion :: Default ,
446
+ "sslv2" => SslVersion :: Sslv2 ,
447
+ "sslv3" => SslVersion :: Sslv3 ,
448
+ "tlsv1" => SslVersion :: Tlsv1 ,
449
+ "tlsv1.0" => SslVersion :: Tlsv10 ,
450
+ "tlsv1.1" => SslVersion :: Tlsv11 ,
451
+ "tlsv1.2" => SslVersion :: Tlsv12 ,
452
+ "tlsv1.3" => SslVersion :: Tlsv13 ,
453
+ _ => bail ! ( "Invalid ssl version `{}`, choose from 'default', 'sslv2', 'sslv3', 'tlsv1', 'tlsv1.0', 'tlsv1.1', 'tlsv1.2', 'tlsv1.3'." , & ssl_version. val) ,
454
+ } ;
455
+ handle. ssl_min_max_version ( version, version) ?;
456
+ }
457
+
441
458
if let Some ( true ) = config. get :: < Option < bool > > ( "http.debug" ) ? {
442
459
handle. verbose ( true ) ?;
443
460
handle. debug_function ( |kind, data| {
0 commit comments