2727from urllib3 .util import Timeout as TimeoutSauce
2828from urllib3 .util import parse_url
2929from urllib3 .util .retry import Retry
30- from urllib3 .util .ssl_ import create_urllib3_context
3130
3231from .auth import _basic_auth_str
3332from .compat import basestring , urlparse
@@ -74,19 +73,6 @@ def SOCKSProxyManager(*args, **kwargs):
7473DEFAULT_POOL_TIMEOUT = None
7574
7675
77- try :
78- import ssl # noqa: F401
79-
80- _preloaded_ssl_context = create_urllib3_context ()
81- _preloaded_ssl_context .load_verify_locations (
82- extract_zipped_paths (DEFAULT_CA_BUNDLE_PATH )
83- )
84- except ImportError :
85- # Bypass default SSLContext creation when Python
86- # interpreter isn't built with the ssl module.
87- _preloaded_ssl_context = None
88-
89-
9076def _urllib3_request_context (
9177 request : "PreparedRequest" ,
9278 verify : "bool | str | None" ,
@@ -99,24 +85,11 @@ def _urllib3_request_context(
9985 scheme = parsed_request_url .scheme .lower ()
10086 port = parsed_request_url .port
10187
102- # Determine if we have and should use our default SSLContext
103- # to optimize performance on standard requests.
104- poolmanager_kwargs = getattr (poolmanager , "connection_pool_kw" , {})
105- has_poolmanager_ssl_context = poolmanager_kwargs .get ("ssl_context" )
106- should_use_default_ssl_context = (
107- _preloaded_ssl_context is not None and not has_poolmanager_ssl_context
108- )
109-
11088 cert_reqs = "CERT_REQUIRED"
11189 if verify is False :
11290 cert_reqs = "CERT_NONE"
113- elif verify is True and should_use_default_ssl_context :
114- pool_kwargs ["ssl_context" ] = _preloaded_ssl_context
11591 elif isinstance (verify , str ):
116- if not os .path .isdir (verify ):
117- pool_kwargs ["ca_certs" ] = verify
118- else :
119- pool_kwargs ["ca_cert_dir" ] = verify
92+ pool_kwargs ["ca_certs" ] = verify
12093 pool_kwargs ["cert_reqs" ] = cert_reqs
12194 if client_cert is not None :
12295 if isinstance (client_cert , tuple ) and len (client_cert ) == 2 :
@@ -314,26 +287,27 @@ def cert_verify(self, conn, url, verify, cert):
314287 :param cert: The SSL certificate to verify.
315288 """
316289 if url .lower ().startswith ("https" ) and verify :
317- conn . cert_reqs = "CERT_REQUIRED"
290+ cert_loc = None
318291
319- # Only load the CA certificates if 'verify' is a string indicating the CA bundle to use.
320- # Otherwise, if verify is a boolean, we don't load anything since
321- # the connection will be using a context with the default certificates already loaded,
322- # and this avoids a call to the slow load_verify_locations()
292+ # Allow self-specified cert location.
323293 if verify is not True :
324- # `verify` must be a str with a path then
325294 cert_loc = verify
326295
327- if not os .path .exists (cert_loc ):
328- raise OSError (
329- f"Could not find a suitable TLS CA certificate bundle, "
330- f"invalid path: { cert_loc } "
331- )
296+ if not cert_loc :
297+ cert_loc = extract_zipped_paths (DEFAULT_CA_BUNDLE_PATH )
298+
299+ if not cert_loc or not os .path .exists (cert_loc ):
300+ raise OSError (
301+ f"Could not find a suitable TLS CA certificate bundle, "
302+ f"invalid path: { cert_loc } "
303+ )
332304
333- if not os .path .isdir (cert_loc ):
334- conn .ca_certs = cert_loc
335- else :
336- conn .ca_cert_dir = cert_loc
305+ conn .cert_reqs = "CERT_REQUIRED"
306+
307+ if not os .path .isdir (cert_loc ):
308+ conn .ca_certs = cert_loc
309+ else :
310+ conn .ca_cert_dir = cert_loc
337311 else :
338312 conn .cert_reqs = "CERT_NONE"
339313 conn .ca_certs = None
0 commit comments