@@ -261,9 +261,11 @@ def utc_offset(): #NOTE: ignore issues like #1647654
261261)
262262
263263
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 ,
265266 ciphers = None , ciphersuites = None , min_version = None ,
266- certfile = None , keyfile = None , ** kwargs ):
267+ certfile = None , keyfile = None ,
268+ ** kwargs ):
267269 if not kwargs .get ("server_side" ):
268270 kwargs ["server_hostname" ] = SIGNED_CERTFILE_HOSTNAME
269271 context = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
@@ -1866,6 +1868,10 @@ class SimpleBackgroundTests(unittest.TestCase):
18661868
18671869 def setUp (self ):
18681870 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+
18691875 self .server_context .load_cert_chain (SIGNED_CERTFILE )
18701876 server = ThreadedEchoServer (context = self .server_context )
18711877 self .enterContext (server )
@@ -2112,27 +2118,32 @@ def test_ciphers(self):
21122118 cert_reqs = ssl .CERT_NONE , ciphers = "^$:,;?*'dorothyx" )
21132119 s .connect (self .server_addr )
21142120
2121+ @requires_tls_version ('TLSv1_3' )
21152122 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
21212124 with test_wrap_socket (socket .socket (socket .AF_INET ),
21222125 cert_reqs = ssl .CERT_NONE ,
21232126 ciphersuites = "TLS_AES_256_GCM_SHA384" ,
21242127 min_version = ssl .TLSVersion .TLSv1_3 ) as s :
21252128 s .connect (self .server_addr )
21262129 self .assertEqual (s .cipher (),
21272130 ("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
21292141 with self .assertRaisesRegex (ssl .SSLError ,
21302142 "No cipher suite can be selected" ):
21312143 with socket .socket (socket .AF_INET ) as sock :
21322144 s = test_wrap_socket (sock , cert_reqs = ssl .CERT_NONE ,
21332145 ciphersuites = "XXX" ,
21342146 min_version = ssl .TLSVersion .TLSv1_3 )
2135- s .connect (self .server_addr )
21362147
21372148 def test_get_ca_certs_capath (self ):
21382149 # capath certs are loaded on request
0 commit comments