Skip to content

Commit 9b4dcfa

Browse files
sfc-gh-stakedaankit-bhatnagar167
authored andcommitted
SNOW-119103: fixed bad default ssl option
1 parent 65f6d2b commit 9b4dcfa

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

ssl_wrap_socket.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
"""
1212
OCSP Mode: FAIL_OPEN, FAIL_CLOSED or INSECURE
1313
"""
14+
import certifi
1415
from six import wraps
16+
from urllib3.contrib.pyopenssl import PyOpenSSLContext
1517

1618
from .constants import OCSPMode
1719

@@ -372,14 +374,28 @@ def _verify_callback(cnx, x509, err_no, err_depth, return_code):
372374

373375
@wraps(ssl_.ssl_wrap_socket)
374376
def ssl_wrap_socket_with_ocsp(*args, **kwargs):
375-
# Manipulate necessary parameters
376-
if 'ssl_context' in kwargs:
377-
del kwargs['ssl_context'] # force urllib context
378-
379-
ret = ssl_.ssl_wrap_socket(*args, **kwargs)
380-
377+
# Extract host_name
381378
hostname_index = get_args(ssl_.ssl_wrap_socket).args.index('server_hostname')
382379
server_hostname = args[hostname_index] if len(args) > hostname_index else kwargs.get('server_hostname', None)
380+
# Remove context if present
381+
ssl_context_index = get_args(ssl_.ssl_wrap_socket).args.index('ssl_context')
382+
context_in_args = len(args) > ssl_context_index
383+
ssl_context = args[hostname_index] if context_in_args else kwargs.get('ssl_context', None)
384+
if not isinstance(ssl_context, PyOpenSSLContext):
385+
# Create new default context
386+
if context_in_args:
387+
new_args = list(args)
388+
new_args[ssl_context_index] = None
389+
args = tuple(new_args)
390+
else:
391+
del kwargs['ssl_context']
392+
# Fix ca certs location
393+
ca_certs_index = get_args(ssl_.ssl_wrap_socket).args.index('ca_certs')
394+
ca_certs_in_args = len(args) > ca_certs_index
395+
if not ca_certs_in_args and not kwargs.get('ca_certs'):
396+
kwargs['ca_certs'] = certifi.where()
397+
398+
ret = ssl_.ssl_wrap_socket(*args, **kwargs)
383399

384400
global FEATURE_OCSP_MODE
385401
global FEATURE_OCSP_RESPONSE_CACHE_FILE_NAME

test/test_connection.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,3 +635,14 @@ def run(self):
635635
self.bucket.put("Fail")
636636
else:
637637
self.bucket.put("Success")
638+
639+
640+
def test_another_site(db_parameters):
641+
import urllib3
642+
643+
def get(url):
644+
pool_manager = urllib3.PoolManager()
645+
res = pool_manager.request('GET', url)
646+
return res.status
647+
648+
assert get('https://wikipedia.org') == 200

0 commit comments

Comments
 (0)