Skip to content

Commit d2a5b16

Browse files
author
pjkersha
committed
* Fix to ServerSSLCertVerification so that it can pass a function-based callback instead of using __call__. In newer versions of OpenSSL the later failed because of a request for __name__ attribute. Instances don't have this but functions do.
* Fixed imissing bracket typo in subj_alt_name causing syntax error.
1 parent a08a1f7 commit d2a5b16

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

ndg/httpsclient/ssl_context_util.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def make_ssl_context_from_config(ssl_config=False, url=None):
3636

3737

3838
def make_ssl_context(key_file=None, cert_file=None, pem_file=None, ca_dir=None,
39-
verify_peer=False, url=None, method=SSL.SSLv23_METHOD,
39+
verify_peer=False, url=None, method=SSL.TLSv1_METHOD,
4040
key_file_passphrase=None):
4141
"""
4242
Creates SSL context containing certificate and key file locations.
@@ -87,5 +87,7 @@ def set_peer_verification_for_url_hostname(ssl_context, url,
8787
if not if_verify_enabled or (ssl_context.get_verify_mode() & SSL.VERIFY_PEER):
8888
urlObj = urlparse.urlparse(url)
8989
hostname = urlObj.hostname
90-
verify_callback = ServerSSLCertVerification(hostname=hostname)
91-
ssl_context.set_verify(SSL.VERIFY_PEER, verify_callback)
90+
server_ssl_cert_verif = ServerSSLCertVerification(hostname=hostname)
91+
verify_callback_ = server_ssl_cert_verif.get_verify_server_cert_func()
92+
ssl_context.set_verify(SSL.VERIFY_PEER, verify_callback_)
93+

ndg/httpsclient/ssl_peer_verification.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,14 @@ def __call__(self, connection, peerCert, errorStatus, errorDepth,
155155
else:
156156
return preverifyOK
157157

158+
def get_verify_server_cert_func(self):
159+
def verify_server_cert(connection, peerCert, errorStatus, errorDepth,
160+
preverifyOK):
161+
return self.__call__(connection, peerCert, errorStatus,
162+
errorDepth, preverifyOK)
163+
164+
return verify_server_cert
165+
158166
@classmethod
159167
def _get_subj_alt_name(cls, peer_cert):
160168
'''Extract subjectAltName DNS name settings from certificate extensions

ndg/httpsclient/subj_alt_name.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class AnotherName(univ.Sequence):
104104
namedtype.NamedType('type-id', univ.ObjectIdentifier()),
105105
namedtype.NamedType('value', univ.Any().subtype(
106106
explicitTag=tag.Tag(tag.tagClassContext,
107-
tag.tagFormatSimple, 0))
107+
tag.tagFormatSimple, 0)))
108108
)
109109

110110

0 commit comments

Comments
 (0)