@@ -2386,7 +2386,10 @@ def wrap_conn(self):
23862386 sys .stdout .write (" client cert is " + pprint .pformat (cert ) + "\n " )
23872387 cert_binary = self .sslconn .getpeercert (True )
23882388 if support .verbose and self .server .chatty :
2389- sys .stdout .write (" cert binary is " + str (len (cert_binary )) + " bytes\n " )
2389+ if cert_binary is None :
2390+ sys .stdout .write (" client did not provide a cert\n " )
2391+ else :
2392+ sys .stdout .write (f" cert binary is { len (cert_binary )} b\n " )
23902393 cipher = self .sslconn .cipher ()
23912394 if support .verbose and self .server .chatty :
23922395 sys .stdout .write (" server: connection cipher is now " + str (cipher ) + "\n " )
@@ -2494,6 +2497,10 @@ def run(self):
24942497 )
24952498 else :
24962499 handle_error ("Test server failure:\n " )
2500+ try :
2501+ self .write (b"ERROR\n " )
2502+ except OSError :
2503+ pass
24972504 self .close ()
24982505 self .running = False
24992506
@@ -4399,24 +4406,30 @@ def test_pha_required_nocert(self):
43994406 server_context .verify_mode = ssl .CERT_REQUIRED
44004407 client_context .post_handshake_auth = True
44014408
4402- # Ignore expected SSLError in ConnectionHandler of ThreadedEchoServer
4403- # (it is only raised sometimes on Windows)
4404- with threading_helper .catch_threading_exception () as cm :
4405- server = ThreadedEchoServer (context = server_context , chatty = False )
4406- with server :
4407- with client_context .wrap_socket (socket .socket (),
4408- server_hostname = hostname ) as s :
4409- s .connect ((HOST , server .port ))
4410- s .write (b'PHA' )
4409+ def msg_cb (conn , direction , version , content_type , msg_type , data ):
4410+ if support .verbose and content_type == _TLSContentType .ALERT :
4411+ info = (conn , direction , version , content_type , msg_type , data )
4412+ sys .stdout .write (f"TLS: { info !r} \n " )
4413+
4414+ server_context ._msg_callback = msg_cb
4415+ client_context ._msg_callback = msg_cb
4416+
4417+ server = ThreadedEchoServer (context = server_context , chatty = True )
4418+ with server :
4419+ with client_context .wrap_socket (socket .socket (),
4420+ server_hostname = hostname ) as s :
4421+ s .connect ((HOST , server .port ))
4422+ s .write (b'PHA' )
4423+ with self .assertRaisesRegex (
4424+ ssl .SSLError ,
4425+ 'tlsv13 alert certificate required'
4426+ ):
44114427 # receive CertificateRequest
44124428 self .assertEqual (s .recv (1024 ), b'OK\n ' )
44134429 # send empty Certificate + Finish
44144430 s .write (b'HASCERT' )
44154431 # receive alert
4416- with self .assertRaisesRegex (
4417- ssl .SSLError ,
4418- 'tlsv13 alert certificate required' ):
4419- s .recv (1024 )
4432+ s .recv (1024 )
44204433
44214434 def test_pha_optional (self ):
44224435 if support .verbose :
0 commit comments