mirror of https://github.com/python/cpython
Issue #12000: When a SSL certificate has a subjectAltName without any
dNSName entry, ssl.match_hostname() should use the subject's commonName. Patch by Nicolas Bareil.
This commit is contained in:
commit
ff9bfca482
|
@ -122,8 +122,9 @@ def match_hostname(cert, hostname):
|
||||||
if _dnsname_to_pat(value).match(hostname):
|
if _dnsname_to_pat(value).match(hostname):
|
||||||
return
|
return
|
||||||
dnsnames.append(value)
|
dnsnames.append(value)
|
||||||
if not san:
|
if not dnsnames:
|
||||||
# The subject is only checked when subjectAltName is empty
|
# The subject is only checked when there is no dNSName entry
|
||||||
|
# in subjectAltName
|
||||||
for sub in cert.get('subject', ()):
|
for sub in cert.get('subject', ()):
|
||||||
for key, value in sub:
|
for key, value in sub:
|
||||||
# XXX according to RFC 2818, the most specific Common Name
|
# XXX according to RFC 2818, the most specific Common Name
|
||||||
|
|
|
@ -277,6 +277,24 @@ class BasicSocketTests(unittest.TestCase):
|
||||||
(('organizationName', 'Google Inc'),))}
|
(('organizationName', 'Google Inc'),))}
|
||||||
fail(cert, 'mail.google.com')
|
fail(cert, 'mail.google.com')
|
||||||
|
|
||||||
|
# No DNS entry in subjectAltName but a commonName
|
||||||
|
cert = {'notAfter': 'Dec 18 23:59:59 2099 GMT',
|
||||||
|
'subject': ((('countryName', 'US'),),
|
||||||
|
(('stateOrProvinceName', 'California'),),
|
||||||
|
(('localityName', 'Mountain View'),),
|
||||||
|
(('commonName', 'mail.google.com'),)),
|
||||||
|
'subjectAltName': (('othername', 'blabla'), )}
|
||||||
|
ok(cert, 'mail.google.com')
|
||||||
|
|
||||||
|
# No DNS entry subjectAltName and no commonName
|
||||||
|
cert = {'notAfter': 'Dec 18 23:59:59 2099 GMT',
|
||||||
|
'subject': ((('countryName', 'US'),),
|
||||||
|
(('stateOrProvinceName', 'California'),),
|
||||||
|
(('localityName', 'Mountain View'),),
|
||||||
|
(('organizationName', 'Google Inc'),)),
|
||||||
|
'subjectAltName': (('othername', 'blabla'),)}
|
||||||
|
fail(cert, 'google.com')
|
||||||
|
|
||||||
# Empty cert / no cert
|
# Empty cert / no cert
|
||||||
self.assertRaises(ValueError, ssl.match_hostname, None, 'example.com')
|
self.assertRaises(ValueError, ssl.match_hostname, None, 'example.com')
|
||||||
self.assertRaises(ValueError, ssl.match_hostname, {}, 'example.com')
|
self.assertRaises(ValueError, ssl.match_hostname, {}, 'example.com')
|
||||||
|
|
|
@ -50,6 +50,7 @@ Luigi Ballabio
|
||||||
Jeff Balogh
|
Jeff Balogh
|
||||||
Matt Bandy
|
Matt Bandy
|
||||||
Michael J. Barber
|
Michael J. Barber
|
||||||
|
Nicolas Bareil
|
||||||
Chris Barker
|
Chris Barker
|
||||||
Nick Barnes
|
Nick Barnes
|
||||||
Quentin Barnes
|
Quentin Barnes
|
||||||
|
|
|
@ -140,6 +140,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #12000: When a SSL certificate has a subjectAltName without any
|
||||||
|
dNSName entry, ssl.match_hostname() should use the subject's commonName.
|
||||||
|
Patch by Nicolas Bareil.
|
||||||
|
|
||||||
- Issue #10775: assertRaises, assertRaisesRegex, assertWarns, and
|
- Issue #10775: assertRaises, assertRaisesRegex, assertWarns, and
|
||||||
assertWarnsRegex now accept a keyword argument 'msg' when used as context
|
assertWarnsRegex now accept a keyword argument 'msg' when used as context
|
||||||
managers. Initial patch by Winston Ewert.
|
managers. Initial patch by Winston Ewert.
|
||||||
|
|
Loading…
Reference in New Issue