|
11 | 11 | """ |
12 | 12 | OCSP Mode: FAIL_OPEN, FAIL_CLOSED or INSECURE |
13 | 13 | """ |
| 14 | +import certifi |
14 | 15 | from six import wraps |
| 16 | +from urllib3.contrib.pyopenssl import PyOpenSSLContext |
15 | 17 |
|
16 | 18 | from .constants import OCSPMode |
17 | 19 |
|
@@ -372,14 +374,28 @@ def _verify_callback(cnx, x509, err_no, err_depth, return_code): |
372 | 374 |
|
373 | 375 | @wraps(ssl_.ssl_wrap_socket) |
374 | 376 | 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 |
381 | 378 | hostname_index = get_args(ssl_.ssl_wrap_socket).args.index('server_hostname') |
382 | 379 | 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) |
383 | 399 |
|
384 | 400 | global FEATURE_OCSP_MODE |
385 | 401 | global FEATURE_OCSP_RESPONSE_CACHE_FILE_NAME |
|
0 commit comments