Skip to content

Commit d520f46

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

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed

src/requests/adapters.py

Lines changed: 16 additions & 39 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,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

0 commit comments

Comments
 (0)