add some document.
small refactoring
This commit is contained in:
@@ -4,6 +4,7 @@ ChangeLog
|
|||||||
- 0.30.0
|
- 0.30.0
|
||||||
|
|
||||||
- fixed if client is behind proxy (#169)
|
- fixed if client is behind proxy (#169)
|
||||||
|
- support SNI for python 2.7.9+ and 3.2+ (#172)
|
||||||
|
|
||||||
- 0.29.0
|
- 0.29.0
|
||||||
|
|
||||||
|
@@ -118,6 +118,24 @@ def _open_socket(addrinfo_list, sockopt, timeout):
|
|||||||
return sock
|
return sock
|
||||||
|
|
||||||
|
|
||||||
|
def _can_use_sni():
|
||||||
|
return sys.version_info[2] >= 9 or (six.PY3 and sys.version_info[2] >= 2)
|
||||||
|
|
||||||
|
|
||||||
|
def _wrap_sni_socket(sock, sslopt, hostname):
|
||||||
|
context = ssl.create_default_context(cafile=sslopt.get('ca_certs', None))
|
||||||
|
context.options = sslopt.get('ssl_version', context.options)
|
||||||
|
context.verify_mode = sslopt['cert_reqs']
|
||||||
|
if 'ciphers' in sslopt:
|
||||||
|
context.set_ciphers(sslopt['ciphers'])
|
||||||
|
return context.wrap_socket(
|
||||||
|
sock,
|
||||||
|
do_handshake_on_connect=sslopt.get('do_handshake_on_connect', True),
|
||||||
|
suppress_ragged_eofs=sslopt.get('suppress_ragged_eofs', True),
|
||||||
|
server_hostname=hostname,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _ssl_socket(sock, user_sslopt, hostname):
|
def _ssl_socket(sock, user_sslopt, hostname):
|
||||||
sslopt = dict(cert_reqs=ssl.CERT_REQUIRED)
|
sslopt = dict(cert_reqs=ssl.CERT_REQUIRED)
|
||||||
certPath = os.path.join(
|
certPath = os.path.join(
|
||||||
@@ -127,18 +145,8 @@ def _ssl_socket(sock, user_sslopt, hostname):
|
|||||||
sslopt.update(user_sslopt)
|
sslopt.update(user_sslopt)
|
||||||
check_hostname = sslopt.pop('check_hostname', True)
|
check_hostname = sslopt.pop('check_hostname', True)
|
||||||
|
|
||||||
if sys.version_info[2] >= 9 or (six.PY3 and sys.version_info[2] >= 2):
|
if _can_use_sni:
|
||||||
context = ssl.create_default_context(cafile=sslopt.get('ca_certs', None))
|
sock = _wrap_sni_socket(sock, sslopt, hostname)
|
||||||
context.options = sslopt.get('ssl_version', context.options)
|
|
||||||
context.verify_mode = sslopt['cert_reqs']
|
|
||||||
if 'ciphers' in sslopt:
|
|
||||||
context.set_ciphers(sslopt['ciphers'])
|
|
||||||
sock = context.wrap_socket(
|
|
||||||
sock,
|
|
||||||
do_handshake_on_connect=sslopt.get('do_handshake_on_connect', True),
|
|
||||||
suppress_ragged_eofs=sslopt.get('suppress_ragged_eofs', True),
|
|
||||||
server_hostname=hostname,
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
sock = ssl.wrap_socket(sock, **sslopt)
|
sock = ssl.wrap_socket(sock, **sslopt)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user