2727from pip ._vendor .urllib3 .util import Timeout as TimeoutSauce
2828from pip ._vendor .urllib3 .util import parse_url
2929from pip ._vendor .urllib3 .util .retry import Retry
30- from pip ._vendor .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,19 +85,9 @@ 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 ):
11692 if not os .path .isdir (verify ):
11793 pool_kwargs ["ca_certs" ] = verify
@@ -314,26 +290,27 @@ def cert_verify(self, conn, url, verify, cert):
314290 :param cert: The SSL certificate to verify.
315291 """
316292 if url .lower ().startswith ("https" ) and verify :
317- conn . cert_reqs = "CERT_REQUIRED"
293+ cert_loc = None
318294
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()
295+ # Allow self-specified cert location.
323296 if verify is not True :
324- # `verify` must be a str with a path then
325297 cert_loc = verify
326298
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- )
299+ if not cert_loc :
300+ cert_loc = extract_zipped_paths (DEFAULT_CA_BUNDLE_PATH )
332301
333- if not os .path .isdir (cert_loc ):
334- conn .ca_certs = cert_loc
335- else :
336- conn .ca_cert_dir = cert_loc
302+ if not cert_loc or not os .path .exists (cert_loc ):
303+ raise OSError (
304+ f"Could not find a suitable TLS CA certificate bundle, "
305+ f"invalid path: { cert_loc } "
306+ )
307+
308+ conn .cert_reqs = "CERT_REQUIRED"
309+
310+ if not os .path .isdir (cert_loc ):
311+ conn .ca_certs = cert_loc
312+ else :
313+ conn .ca_cert_dir = cert_loc
337314 else :
338315 conn .cert_reqs = "CERT_NONE"
339316 conn .ca_certs = None
@@ -410,7 +387,7 @@ def build_connection_pool_key_attributes(self, request, verify, cert=None):
410387 ``"cert_reqs"`` will be set
411388 * If ``verify`` is a string, (i.e., it is a user-specified trust bundle)
412389 ``"ca_certs"`` will be set if the string is not a directory recognized
413- by :py:func:`os.path.isdir`, otherwise ``"ca_certs_dir "`` will be
390+ by :py:func:`os.path.isdir`, otherwise ``"ca_cert_dir "`` will be
414391 set.
415392 * If ``"cert"`` is specified, ``"cert_file"`` will always be set. If
416393 ``"cert"`` is a tuple with a second item, ``"key_file"`` will also
0 commit comments