Skip to content

Commit ce40c46

Browse files
committed
Revert caching a default SSLContext
1 parent 0e322af commit ce40c46

File tree

1 file changed

+17
-43
lines changed

1 file changed

+17
-43
lines changed

src/requests/adapters.py

Lines changed: 17 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
from urllib3.util import Timeout as TimeoutSauce
2828
from urllib3.util import parse_url
2929
from urllib3.util.retry import Retry
30-
from urllib3.util.ssl_ import create_urllib3_context
3130

3231
from .auth import _basic_auth_str
3332
from .compat import basestring, urlparse
@@ -74,19 +73,6 @@ def SOCKSProxyManager(*args, **kwargs):
7473
DEFAULT_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-
9076
def _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

Comments
 (0)