@@ -261,9 +261,11 @@ def utc_offset(): #NOTE: ignore issues like #1647654
261
261
)
262
262
263
263
264
- def test_wrap_socket (sock , * , cert_reqs = ssl .CERT_NONE , ca_certs = None ,
264
+ def test_wrap_socket (sock , * ,
265
+ cert_reqs = ssl .CERT_NONE , ca_certs = None ,
265
266
ciphers = None , ciphersuites = None , min_version = None ,
266
- certfile = None , keyfile = None , ** kwargs ):
267
+ certfile = None , keyfile = None ,
268
+ ** kwargs ):
267
269
if not kwargs .get ("server_side" ):
268
270
kwargs ["server_hostname" ] = SIGNED_CERTFILE_HOSTNAME
269
271
context = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
@@ -1866,6 +1868,10 @@ class SimpleBackgroundTests(unittest.TestCase):
1866
1868
1867
1869
def setUp (self ):
1868
1870
self .server_context = ssl .SSLContext (ssl .PROTOCOL_TLS_SERVER )
1871
+
1872
+ if has_tls_version ('TLSv1_3' ):
1873
+ self .server_context .set_ciphersuites ('TLS_AES_256_GCM_SHA384' )
1874
+
1869
1875
self .server_context .load_cert_chain (SIGNED_CERTFILE )
1870
1876
server = ThreadedEchoServer (context = self .server_context )
1871
1877
self .enterContext (server )
@@ -2112,27 +2118,32 @@ def test_ciphers(self):
2112
2118
cert_reqs = ssl .CERT_NONE , ciphers = "^$:,;?*'dorothyx" )
2113
2119
s .connect (self .server_addr )
2114
2120
2121
+ @requires_tls_version ('TLSv1_3' )
2115
2122
def test_ciphersuites (self ):
2116
- with test_wrap_socket (socket .socket (socket .AF_INET ),
2117
- cert_reqs = ssl .CERT_NONE ,
2118
- min_version = ssl .TLSVersion .TLSv1_3 ) as s :
2119
- s .connect (self .server_addr )
2120
- self .assertEqual (s .cipher ()[1 ], "TLSv1.3" )
2123
+ # Test successful TLS 1.3 handshake
2121
2124
with test_wrap_socket (socket .socket (socket .AF_INET ),
2122
2125
cert_reqs = ssl .CERT_NONE ,
2123
2126
ciphersuites = "TLS_AES_256_GCM_SHA384" ,
2124
2127
min_version = ssl .TLSVersion .TLSv1_3 ) as s :
2125
2128
s .connect (self .server_addr )
2126
2129
self .assertEqual (s .cipher (),
2127
2130
("TLS_AES_256_GCM_SHA384" , "TLSv1.3" , 256 ))
2128
- # Error checking can happen at instantiation or when connecting
2131
+
2132
+ # Test mismatched TLS 1.3 cipher suites
2133
+ with test_wrap_socket (socket .socket (socket .AF_INET ),
2134
+ cert_reqs = ssl .CERT_NONE ,
2135
+ ciphersuites = "TLS_AES_128_GCM_SHA256" ,
2136
+ min_version = ssl .TLSVersion .TLSv1_3 ) as s :
2137
+ with self .assertRaises (ssl .SSLError ):
2138
+ s .connect (self .server_addr )
2139
+
2140
+ # Test unrecognized TLS 1.3 cipher suite name
2129
2141
with self .assertRaisesRegex (ssl .SSLError ,
2130
2142
"No cipher suite can be selected" ):
2131
2143
with socket .socket (socket .AF_INET ) as sock :
2132
2144
s = test_wrap_socket (sock , cert_reqs = ssl .CERT_NONE ,
2133
2145
ciphersuites = "XXX" ,
2134
2146
min_version = ssl .TLSVersion .TLSv1_3 )
2135
- s .connect (self .server_addr )
2136
2147
2137
2148
def test_get_ca_certs_capath (self ):
2138
2149
# capath certs are loaded on request
0 commit comments