Skip to content

Commit 6d8c1ab

Browse files
committed
Issue #19509: Finish implementation of check_hostname
The new asyncio package now supports the new feature and comes with additional tests for SSL.
1 parent 8ff6f3e commit 6d8c1ab

8 files changed

Lines changed: 319 additions & 57 deletions

File tree

Lib/asyncio/selector_events.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,8 @@ def __init__(self, loop, rawsock, protocol, sslcontext, waiter=None,
583583
# cadefault=True.
584584
if hasattr(ssl, '_create_stdlib_context'):
585585
sslcontext = ssl._create_stdlib_context(
586-
cert_reqs=ssl.CERT_REQUIRED)
586+
cert_reqs=ssl.CERT_REQUIRED,
587+
check_hostname=bool(server_hostname))
587588
else:
588589
# Fallback for Python 3.3.
589590
sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
@@ -639,17 +640,19 @@ def _on_handshake(self):
639640
self._loop.remove_reader(self._sock_fd)
640641
self._loop.remove_writer(self._sock_fd)
641642

642-
# Verify hostname if requested.
643643
peercert = self._sock.getpeercert()
644-
if (self._server_hostname and
645-
self._sslcontext.verify_mode != ssl.CERT_NONE):
646-
try:
647-
ssl.match_hostname(peercert, self._server_hostname)
648-
except Exception as exc:
649-
self._sock.close()
650-
if self._waiter is not None:
651-
self._waiter.set_exception(exc)
652-
return
644+
if not hasattr(self._sslcontext, 'check_hostname'):
645+
# Verify hostname if requested, Python 3.4+ uses check_hostname
646+
# and checks the hostname in do_handshake()
647+
if (self._server_hostname and
648+
self._sslcontext.verify_mode != ssl.CERT_NONE):
649+
try:
650+
ssl.match_hostname(peercert, self._server_hostname)
651+
except Exception as exc:
652+
self._sock.close()
653+
if self._waiter is not None:
654+
self._waiter.set_exception(exc)
655+
return
653656

654657
# Add extra info that becomes available after handshake.
655658
self._extra.update(peercert=peercert,

Lib/test/test_asyncio/keycert3.pem

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMLgD0kAKDb5cFyP
3+
jbwNfR5CtewdXC+kMXAWD8DLxiTTvhMW7qVnlwOm36mZlszHKvsRf05lT4pegiFM
4+
9z2j1OlaN+ci/X7NU22TNN6crYSiN77FjYJP464j876ndSxyD+rzys386T+1r1aZ
5+
aggEdkj1TsSsv1zWIYKlPIjlvhuxAgMBAAECgYA0aH+T2Vf3WOPv8KdkcJg6gCRe
6+
yJKXOWgWRcicx/CUzOEsTxmFIDPLxqAWA3k7v0B+3vjGw5Y9lycV/5XqXNoQI14j
7+
y09iNsumds13u5AKkGdTJnZhQ7UKdoVHfuP44ZdOv/rJ5/VD6F4zWywpe90pcbK+
8+
AWDVtusgGQBSieEl1QJBAOyVrUG5l2yoUBtd2zr/kiGm/DYyXlIthQO/A3/LngDW
9+
5/ydGxVsT7lAVOgCsoT+0L4efTh90PjzW8LPQrPBWVMCQQDS3h/FtYYd5lfz+FNL
10+
9CEe1F1w9l8P749uNUD0g317zv1tatIqVCsQWHfVHNdVvfQ+vSFw38OORO00Xqs9
11+
1GJrAkBkoXXEkxCZoy4PteheO/8IWWLGGr6L7di6MzFl1lIqwT6D8L9oaV2vynFT
12+
DnKop0pa09Unhjyw57KMNmSE2SUJAkEArloTEzpgRmCq4IK2/NpCeGdHS5uqRlbh
13+
1VIa/xGps7EWQl5Mn8swQDel/YP3WGHTjfx7pgSegQfkyaRtGpZ9OQJAa9Vumj8m
14+
JAAtI0Bnga8hgQx7BhTQY4CadDxyiRGOGYhwUzYVCqkb2sbVRH9HnwUaJT7cWBY3
15+
RnJdHOMXWem7/w==
16+
-----END PRIVATE KEY-----
17+
Certificate:
18+
Data:
19+
Version: 1 (0x0)
20+
Serial Number: 12723342612721443281 (0xb09264b1f2da21d1)
21+
Signature Algorithm: sha1WithRSAEncryption
22+
Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server
23+
Validity
24+
Not Before: Jan 4 19:47:07 2013 GMT
25+
Not After : Nov 13 19:47:07 2022 GMT
26+
Subject: C=XY, L=Castle Anthrax, O=Python Software Foundation, CN=localhost
27+
Subject Public Key Info:
28+
Public Key Algorithm: rsaEncryption
29+
Public-Key: (1024 bit)
30+
Modulus:
31+
00:c2:e0:0f:49:00:28:36:f9:70:5c:8f:8d:bc:0d:
32+
7d:1e:42:b5:ec:1d:5c:2f:a4:31:70:16:0f:c0:cb:
33+
c6:24:d3:be:13:16:ee:a5:67:97:03:a6:df:a9:99:
34+
96:cc:c7:2a:fb:11:7f:4e:65:4f:8a:5e:82:21:4c:
35+
f7:3d:a3:d4:e9:5a:37:e7:22:fd:7e:cd:53:6d:93:
36+
34:de:9c:ad:84:a2:37:be:c5:8d:82:4f:e3:ae:23:
37+
f3:be:a7:75:2c:72:0f:ea:f3:ca:cd:fc:e9:3f:b5:
38+
af:56:99:6a:08:04:76:48:f5:4e:c4:ac:bf:5c:d6:
39+
21:82:a5:3c:88:e5:be:1b:b1
40+
Exponent: 65537 (0x10001)
41+
Signature Algorithm: sha1WithRSAEncryption
42+
2f:42:5f:a3:09:2c:fa:51:88:c7:37:7f:ea:0e:63:f0:a2:9a:
43+
e5:5a:e2:c8:20:f0:3f:60:bc:c8:0f:b6:c6:76:ce:db:83:93:
44+
f5:a3:33:67:01:8e:04:cd:00:9a:73:fd:f3:35:86:fa:d7:13:
45+
e2:46:c6:9d:c0:29:53:d4:a9:90:b8:77:4b:e6:83:76:e4:92:
46+
d6:9c:50:cf:43:d0:c6:01:77:61:9a:de:9b:70:f7:72:cd:59:
47+
00:31:69:d9:b4:ca:06:9c:6d:c3:c7:80:8c:68:e6:b5:a2:f8:
48+
ef:1d:bb:16:9f:77:77:ef:87:62:22:9b:4d:69:a4:3a:1a:f1:
49+
21:5e:8c:32:ac:92:fd:15:6b:18:c2:7f:15:0d:98:30:ca:75:
50+
8f:1a:71:df:da:1d:b2:ef:9a:e8:2d:2e:02:fd:4a:3c:aa:96:
51+
0b:06:5d:35:b3:3d:24:87:4b:e0:b0:58:60:2f:45:ac:2e:48:
52+
8a:b0:99:10:65:27:ff:cc:b1:d8:fd:bd:26:6b:b9:0c:05:2a:
53+
f4:45:63:35:51:07:ed:83:85:fe:6f:69:cb:bb:40:a8:ae:b6:
54+
3b:56:4a:2d:a4:ed:6d:11:2c:4d:ed:17:24:fd:47:bc:d3:41:
55+
a2:d3:06:fe:0c:90:d8:d8:94:26:c4:ff:cc:a1:d8:42:77:eb:
56+
fc:a9:94:71
57+
-----BEGIN CERTIFICATE-----
58+
MIICpDCCAYwCCQCwkmSx8toh0TANBgkqhkiG9w0BAQUFADBNMQswCQYDVQQGEwJY
59+
WTEmMCQGA1UECgwdUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0ExFjAUBgNV
60+
BAMMDW91ci1jYS1zZXJ2ZXIwHhcNMTMwMTA0MTk0NzA3WhcNMjIxMTEzMTk0NzA3
61+
WjBfMQswCQYDVQQGEwJYWTEXMBUGA1UEBxMOQ2FzdGxlIEFudGhyYXgxIzAhBgNV
62+
BAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uMRIwEAYDVQQDEwlsb2NhbGhv
63+
c3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMLgD0kAKDb5cFyPjbwNfR5C
64+
tewdXC+kMXAWD8DLxiTTvhMW7qVnlwOm36mZlszHKvsRf05lT4pegiFM9z2j1Ola
65+
N+ci/X7NU22TNN6crYSiN77FjYJP464j876ndSxyD+rzys386T+1r1aZaggEdkj1
66+
TsSsv1zWIYKlPIjlvhuxAgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAC9CX6MJLPpR
67+
iMc3f+oOY/CimuVa4sgg8D9gvMgPtsZ2ztuDk/WjM2cBjgTNAJpz/fM1hvrXE+JG
68+
xp3AKVPUqZC4d0vmg3bkktacUM9D0MYBd2Ga3ptw93LNWQAxadm0ygacbcPHgIxo
69+
5rWi+O8duxafd3fvh2Iim01ppDoa8SFejDKskv0VaxjCfxUNmDDKdY8acd/aHbLv
70+
mugtLgL9SjyqlgsGXTWzPSSHS+CwWGAvRawuSIqwmRBlJ//Msdj9vSZruQwFKvRF
71+
YzVRB+2Dhf5vacu7QKiutjtWSi2k7W0RLE3tFyT9R7zTQaLTBv4MkNjYlCbE/8yh
72+
2EJ36/yplHE=
73+
-----END CERTIFICATE-----

Lib/test/test_asyncio/pycacert.pem

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
Certificate:
2+
Data:
3+
Version: 3 (0x2)
4+
Serial Number: 12723342612721443280 (0xb09264b1f2da21d0)
5+
Signature Algorithm: sha1WithRSAEncryption
6+
Issuer: C=XY, O=Python Software Foundation CA, CN=our-ca-server
7+
Validity
8+
Not Before: Jan 4 19:47:07 2013 GMT
9+
Not After : Jan 2 19:47:07 2023 GMT
10+
Subject: C=XY, O=Python Software Foundation CA, CN=our-ca-server
11+
Subject Public Key Info:
12+
Public Key Algorithm: rsaEncryption
13+
Public-Key: (2048 bit)
14+
Modulus:
15+
00:e7:de:e9:e3:0c:9f:00:b6:a1:fd:2b:5b:96:d2:
16+
6f:cc:e0:be:86:b9:20:5e:ec:03:7a:55:ab:ea:a4:
17+
e9:f9:49:85:d2:66:d5:ed:c7:7a:ea:56:8e:2d:8f:
18+
e7:42:e2:62:28:a9:9f:d6:1b:8e:eb:b5:b4:9c:9f:
19+
14:ab:df:e6:94:8b:76:1d:3e:6d:24:61:ed:0c:bf:
20+
00:8a:61:0c:df:5c:c8:36:73:16:00:cd:47:ba:6d:
21+
a4:a4:74:88:83:23:0a:19:fc:09:a7:3c:4a:4b:d3:
22+
e7:1d:2d:e4:ea:4c:54:21:f3:26:db:89:37:18:d4:
23+
02:bb:40:32:5f:a4:ff:2d:1c:f7:d4:bb:ec:8e:cf:
24+
5c:82:ac:e6:7c:08:6c:48:85:61:07:7f:25:e0:5c:
25+
e0:bc:34:5f:e0:b9:04:47:75:c8:47:0b:8d:bc:d6:
26+
c8:68:5f:33:83:62:d2:20:44:35:b1:ad:81:1a:8a:
27+
cd:bc:35:b0:5c:8b:47:d6:18:e9:9c:18:97:cc:01:
28+
3c:29:cc:e8:1e:e4:e4:c1:b8:de:e7:c2:11:18:87:
29+
5a:93:34:d8:a6:25:f7:14:71:eb:e4:21:a2:d2:0f:
30+
2e:2e:d4:62:00:35:d3:d6:ef:5c:60:4b:4c:a9:14:
31+
e2:dd:15:58:46:37:33:26:b7:e7:2e:5d:ed:42:e4:
32+
c5:4d
33+
Exponent: 65537 (0x10001)
34+
X509v3 extensions:
35+
X509v3 Subject Key Identifier:
36+
BC:DD:62:D9:76:DA:1B:D2:54:6B:CF:E0:66:9B:1E:1E:7B:56:0C:0B
37+
X509v3 Authority Key Identifier:
38+
keyid:BC:DD:62:D9:76:DA:1B:D2:54:6B:CF:E0:66:9B:1E:1E:7B:56:0C:0B
39+
40+
X509v3 Basic Constraints:
41+
CA:TRUE
42+
Signature Algorithm: sha1WithRSAEncryption
43+
7d:0a:f5:cb:8d:d3:5d:bd:99:8e:f8:2b:0f:ba:eb:c2:d9:a6:
44+
27:4f:2e:7b:2f:0e:64:d8:1c:35:50:4e:ee:fc:90:b9:8d:6d:
45+
a8:c5:c6:06:b0:af:f3:2d:bf:3b:b8:42:07:dd:18:7d:6d:95:
46+
54:57:85:18:60:47:2f:eb:78:1b:f9:e8:17:fd:5a:0d:87:17:
47+
28:ac:4c:6a:e6:bc:29:f4:f4:55:70:29:42:de:85:ea:ab:6c:
48+
23:06:64:30:75:02:8e:53:bc:5e:01:33:37:cc:1e:cd:b8:a4:
49+
fd:ca:e4:5f:65:3b:83:1c:86:f1:55:02:a0:3a:8f:db:91:b7:
50+
40:14:b4:e7:8d:d2:ee:73:ba:e3:e5:34:2d:bc:94:6f:4e:24:
51+
06:f7:5f:8b:0e:a7:8e:6b:de:5e:75:f4:32:9a:50:b1:44:33:
52+
9a:d0:05:e2:78:82:ff:db:da:8a:63:eb:a9:dd:d1:bf:a0:61:
53+
ad:e3:9e:8a:24:5d:62:0e:e7:4c:91:7f:ef:df:34:36:3b:2f:
54+
5d:f5:84:b2:2f:c4:6d:93:96:1a:6f:30:28:f1:da:12:9a:64:
55+
b4:40:33:1d:bd:de:2b:53:a8:ea:be:d6:bc:4e:96:f5:44:fb:
56+
32:18:ae:d5:1f:f6:69:af:b6:4e:7b:1d:58:ec:3b:a9:53:a3:
57+
5e:58:c8:9e
58+
-----BEGIN CERTIFICATE-----
59+
MIIDbTCCAlWgAwIBAgIJALCSZLHy2iHQMA0GCSqGSIb3DQEBBQUAME0xCzAJBgNV
60+
BAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQTEW
61+
MBQGA1UEAwwNb3VyLWNhLXNlcnZlcjAeFw0xMzAxMDQxOTQ3MDdaFw0yMzAxMDIx
62+
OTQ3MDdaME0xCzAJBgNVBAYTAlhZMSYwJAYDVQQKDB1QeXRob24gU29mdHdhcmUg
63+
Rm91bmRhdGlvbiBDQTEWMBQGA1UEAwwNb3VyLWNhLXNlcnZlcjCCASIwDQYJKoZI
64+
hvcNAQEBBQADggEPADCCAQoCggEBAOfe6eMMnwC2of0rW5bSb8zgvoa5IF7sA3pV
65+
q+qk6flJhdJm1e3HeupWji2P50LiYiipn9Ybjuu1tJyfFKvf5pSLdh0+bSRh7Qy/
66+
AIphDN9cyDZzFgDNR7ptpKR0iIMjChn8Cac8SkvT5x0t5OpMVCHzJtuJNxjUArtA
67+
Ml+k/y0c99S77I7PXIKs5nwIbEiFYQd/JeBc4Lw0X+C5BEd1yEcLjbzWyGhfM4Ni
68+
0iBENbGtgRqKzbw1sFyLR9YY6ZwYl8wBPCnM6B7k5MG43ufCERiHWpM02KYl9xRx
69+
6+QhotIPLi7UYgA109bvXGBLTKkU4t0VWEY3Mya35y5d7ULkxU0CAwEAAaNQME4w
70+
HQYDVR0OBBYEFLzdYtl22hvSVGvP4GabHh57VgwLMB8GA1UdIwQYMBaAFLzdYtl2
71+
2hvSVGvP4GabHh57VgwLMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
72+
AH0K9cuN0129mY74Kw+668LZpidPLnsvDmTYHDVQTu78kLmNbajFxgawr/Mtvzu4
73+
QgfdGH1tlVRXhRhgRy/reBv56Bf9Wg2HFyisTGrmvCn09FVwKULeheqrbCMGZDB1
74+
Ao5TvF4BMzfMHs24pP3K5F9lO4MchvFVAqA6j9uRt0AUtOeN0u5zuuPlNC28lG9O
75+
JAb3X4sOp45r3l519DKaULFEM5rQBeJ4gv/b2opj66nd0b+gYa3jnookXWIO50yR
76+
f+/fNDY7L131hLIvxG2TlhpvMCjx2hKaZLRAMx293itTqOq+1rxOlvVE+zIYrtUf
77+
9mmvtk57HVjsO6lTo15YyJ4=
78+
-----END CERTIFICATE-----

Lib/test/test_asyncio/sample.crt

Lines changed: 0 additions & 14 deletions
This file was deleted.

Lib/test/test_asyncio/sample.key

Lines changed: 0 additions & 15 deletions
This file was deleted.

Lib/test/test_asyncio/ssl_cert.pem

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICVDCCAb2gAwIBAgIJANfHOBkZr8JOMA0GCSqGSIb3DQEBBQUAMF8xCzAJBgNV
3+
BAYTAlhZMRcwFQYDVQQHEw5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9u
4+
IFNvZnR3YXJlIEZvdW5kYXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDEw
5+
MDgyMzAxNTZaFw0yMDEwMDUyMzAxNTZaMF8xCzAJBgNVBAYTAlhZMRcwFQYDVQQH
6+
Ew5DYXN0bGUgQW50aHJheDEjMCEGA1UEChMaUHl0aG9uIFNvZnR3YXJlIEZvdW5k
7+
YXRpb24xEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
8+
gYkCgYEA21vT5isq7F68amYuuNpSFlKDPrMUCa4YWYqZRt2OZ+/3NKaZ2xAiSwr7
9+
6MrQF70t5nLbSPpqE5+5VrS58SY+g/sXLiFd6AplH1wJZwh78DofbFYXUggktFMt
10+
pTyiX8jtP66bkcPkDADA089RI1TQR6Ca+n7HFa7c1fabVV6i3zkCAwEAAaMYMBYw
11+
FAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBBQUAA4GBAHPctQBEQ4wd
12+
BJ6+JcpIraopLn8BGhbjNWj40mmRqWB/NAWF6M5ne7KpGAu7tLeG4hb1zLaldK8G
13+
lxy2GPSRF6LFS48dpEj2HbMv2nvv6xxalDMJ9+DicWgAKTQ6bcX2j3GUkCR0g/T1
14+
CRlNBAAlvhKzO7Clpf9l0YKBEfraJByX
15+
-----END CERTIFICATE-----

Lib/test/test_asyncio/ssl_key.pem

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANtb0+YrKuxevGpm
3+
LrjaUhZSgz6zFAmuGFmKmUbdjmfv9zSmmdsQIksK++jK0Be9LeZy20j6ahOfuVa0
4+
ufEmPoP7Fy4hXegKZR9cCWcIe/A6H2xWF1IIJLRTLaU8ol/I7T+um5HD5AwAwNPP
5+
USNU0Eegmvp+xxWu3NX2m1Veot85AgMBAAECgYA3ZdZ673X0oexFlq7AAmrutkHt
6+
CL7LvwrpOiaBjhyTxTeSNWzvtQBkIU8DOI0bIazA4UreAFffwtvEuPmonDb3F+Iq
7+
SMAu42XcGyVZEl+gHlTPU9XRX7nTOXVt+MlRRRxL6t9GkGfUAXI3XxJDXW3c0vBK
8+
UL9xqD8cORXOfE06rQJBAP8mEX1ERkR64Ptsoe4281vjTlNfIbs7NMPkUnrn9N/Y
9+
BLhjNIfQ3HFZG8BTMLfX7kCS9D593DW5tV4Z9BP/c6cCQQDcFzCcVArNh2JSywOQ
10+
ZfTfRbJg/Z5Lt9Fkngv1meeGNPgIMLN8Sg679pAOOWmzdMO3V706rNPzSVMME7E5
11+
oPIfAkEA8pDddarP5tCvTTgUpmTFbakm0KoTZm2+FzHcnA4jRh+XNTjTOv98Y6Ik
12+
eO5d1ZnKXseWvkZncQgxfdnMqqpj5wJAcNq/RVne1DbYlwWchT2Si65MYmmJ8t+F
13+
0mcsULqjOnEMwf5e+ptq5LzwbyrHZYq5FNk7ocufPv/ZQrcSSC+cFwJBAKvOJByS
14+
x56qyGeZLOQlWS2JS3KJo59XuLFGqcbgN9Om9xFa41Yb4N9NvplFivsvZdw3m1Q/
15+
SPIXQuT8RMPDVNQ=
16+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)