@@ -1421,23 +1421,21 @@ mod _ssl {
14211421let environ = os_module. get_attr ( "environ" , vm) ?;
14221422
14231423// Try SSL_CERT_FILE first
1424- if let Ok ( cert_file) =Self :: get_env_path ( & environ, "SSL_CERT_FILE" , vm) {
1425- if Path :: new ( & cert_file) . exists ( ) {
1426- if let Ok ( stats) = loader. load_from_file ( & cert_file) {
1427- self . update_cert_stats ( stats) ;
1428- return Ok ( true ) ;
1429- }
1430- }
1424+ if let Ok ( cert_file) =Self :: get_env_path ( & environ, "SSL_CERT_FILE" , vm)
1425+ &&Path :: new ( & cert_file) . exists ( )
1426+ &&let Ok ( stats) = loader. load_from_file ( & cert_file)
1427+ {
1428+ self . update_cert_stats ( stats) ;
1429+ return Ok ( true ) ;
14311430}
14321431
14331432// Try SSL_CERT_DIR (only if SSL_CERT_FILE didn't work)
1434- if let Ok ( cert_dir) =Self :: get_env_path ( & environ, "SSL_CERT_DIR" , vm) {
1435- if Path :: new ( & cert_dir) . is_dir ( ) {
1436- if let Ok ( stats) = loader. load_from_dir ( & cert_dir) {
1437- self . update_cert_stats ( stats) ;
1438- return Ok ( true ) ;
1439- }
1440- }
1433+ if let Ok ( cert_dir) =Self :: get_env_path ( & environ, "SSL_CERT_DIR" , vm)
1434+ &&Path :: new ( & cert_dir) . is_dir ( )
1435+ &&let Ok ( stats) = loader. load_from_dir ( & cert_dir)
1436+ {
1437+ self . update_cert_stats ( stats) ;
1438+ return Ok ( true ) ;
14411439}
14421440
14431441Ok ( false )
@@ -1454,23 +1452,29 @@ mod _ssl {
14541452store : & mut rustls:: RootCertStore ,
14551453vm : & VirtualMachine ,
14561454) ->PyResult < ( ) > {
1457- match rustls_native_certs:: load_native_certs ( ) {
1458- Ok ( certs) =>{
1459- for certin certs{
1460- let is_ca = cert:: is_ca_certificate ( cert. as_ref ( ) ) ;
1461- if store. add ( cert) . is_ok ( ) {
1462- * self . x509_cert_count . write ( ) +=1 ;
1463- if is_ca{
1464- * self . ca_cert_count . write ( ) +=1 ;
1465- }
1466- }
1455+ let result = rustls_native_certs:: load_native_certs ( ) ;
1456+
1457+ // Load successfully found certificates
1458+ for certin result. certs {
1459+ let is_ca = cert:: is_ca_certificate ( cert. as_ref ( ) ) ;
1460+ if store. add ( cert) . is_ok ( ) {
1461+ * self . x509_cert_count . write ( ) +=1 ;
1462+ if is_ca{
1463+ * self . ca_cert_count . write ( ) +=1 ;
14671464}
1468- Ok ( ( ) )
1469- }
1470- Err ( e) =>{
1471- Err ( vm. new_os_error ( format ! ( "Failed to load native certificates: {}" , e) ) )
14721465}
14731466}
1467+
1468+ // If there were errors but some certs loaded, just continue
1469+ // If NO certs loaded and there were errors, report the first error
1470+ if * self . x509_cert_count . read ( ) ==0 && !result. errors . is_empty ( ) {
1471+ return Err ( vm. new_os_error ( format ! (
1472+ "Failed to load native certificates: {}" ,
1473+ result. errors[ 0 ]
1474+ ) ) ) ;
1475+ }
1476+
1477+ Ok ( ( ) )
14741478}
14751479
14761480#[ pymethod]