サーバーとクライアントの間でssl接続を作成しようとしていますが、引き続きConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine
エラーが発生します。SSL接続を強制しようとするとサーバーが強制的に接続を閉じる
client.py
class Client(object):
def __init__(self):
threading.Thread(target=self.init_sock).start()
def init_sock(self):
host = 'localhost'
port = 49374
baresock = socket(AF_INET6, SOCK_STREAM)
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
self.servsock = context.wrap_socket(baresock, server_hostname=host)
try:
self.servsock.connect((host, port)) #<--- Line error is being thrown at
logging.info("Connection Successful")
except:
logging.info("Connection Problem")
return
threading.Thread(target=self.listen_loop).start()
そしてserver.py:
class ClientHandler(socketserver.BaseRequestHandler):
def handle(self):
pass
class Server(socketserver.ThreadingTCPServer):
srvhost = ''
srvport = 49374
def __init__(self,
request_handler_class=ClientHandler,
certfile="../scache/cert.pem",
keyfile="../scache/key.pem",
ssl_version=ssl.PROTOCOL_TLSv1_2,
bind_and_activate=True):
self.address_family = socket.AF_INET6
self.certfile = certfile
self.keyfile = keyfile
self.ssl_version = ssl_version
server_address = (self.srvhost, self.srvport)
super(Server, self).__init__(server_address, request_handler_class, bind_and_activate)
def get_request(self):
newsocket, fromaddr = self.socket.accept()
context = ssl.create_default_context()
context.load_cert_chain(certfile=self.certfile, keyfile=self.keyfile) # <------ Hanging Here
logging.info("New Request from " + fromaddr[0])
connstream = context.wrap_socket(newsocket, server_side=True)
logging.info("Socket Wrapped")
return connstream, fromaddr
私はクライアントからサーバに接続しようとすると述べたように、クライアントはWinError 10054をスローします上記。サーバー側でデバッガを使用しようとすると、socketserver.py
の_handle_request_noblock
メソッドにエラーが続き、request, client_address = self.get_request()
がOSErrorをスローしています。フルトレースバック:
Traceback (most recent call last):
File "C:\Program Files\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Program Files\Anaconda3\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:/Project/src/client.py", line 36, in init_sock
self.servsock.connect((host, port))
File "C:\Program Files\Anaconda3\lib\ssl.py", line 1093, in connect
self._real_connect(addr, False)
File "C:\Program Files\Anaconda3\lib\ssl.py", line 1084, in _real_connect
self.do_handshake()
File "C:\Program Files\Anaconda3\lib\ssl.py", line 1061, in do_handshake
self._sslobj.do_handshake()
File "C:\Program Files\Anaconda3\lib\ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
このエラーの原因は何ですか?また、トラブルシューティングを行うにはどうすればよいですか。ありがとう。
フルOSErrorを含めることはできますか? –
フルトレースバックを追加しました。 – JGrindal
これはクライアント側です...ちょうどsslハンドシェイクが失敗したように見えます。サーバー側のOSErrorは何ですか?何らかの理由で証明書を読み込めないようです。 btw、あなたは証明書をインストールしましたか(pipなど)? 試し: 要求、client_address =自己 –