我目前正在將一些遺留代碼遷移到 asyncio 并遇到有關(guān) SSL 握手的問(wèn)題。我正在創(chuàng)建一個(gè) SSL 服務(wù)器:import osimport socketimport asynciofrom myexample import Connectionstorage_path = '.' # Path where certificates are stored (self-signed)ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)ssl_context.load_verify_locations( cafile = os.path.join(storage_path, 'root.cert'))ssl_context.load_cert_chain( certfile = os.path.join(storage_path, 'test-server.cert'), keyfile = os.path.join(storage_path, 'test-server.key'))ssl_context.verify_mode = ssl.VerifyMode.CERT_REQUIREDloop = asyncio.new_event_loop()loop.set_debug(True)async def create_server_wrapped(): server = await self.loop.create_server( Connection, # Connection class; Doesn't matter which one, issue also happens with examples from Python wiki '127.0.0.1', 20000, ssl = ssl_context, reuse_port = True, reuse_address = False, backlog = 1000 ) await server.serve_forever()loop.run_until_complete(create_server_wrapped())loop.run_forever()我通過(guò)普通插座連接:import osimport sslimport socketstorage_path = '.' # Path where certificates are stored (self-signed)cert_file = os.path.join(storage_path, 'client.cert')pkey_file = os.path.join(storage_path, 'client.key')context = ssl.create_default_context( purpose = ssl.Purpose.SERVER_AUTH, cafile = os.path.join(storage_path, 'root.cert'))context.load_cert_chain(cert_file, pkey_file)context.check_hostname = False # Connecting by IPplain_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)plain_socket.settimeout(5)if not plain_socket.getsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE): plain_socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) plain_socket.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 2) sock = context.wrap_socket(plain_socket, server_side = False)sock.connect(('127.0.0.1', 20700))嘗試連接時(shí),大多數(shù)時(shí)候我會(huì)得到一個(gè)socket.error: _ssl.c:1039: The handshake operation timed out
asyncio 掛在 SSL 握手上
慕運(yùn)維8079593
2023-05-09 15:23:43