Я хочу добавить ssl-поддержку на существующий TCP-сервер, основанный на классе SocketServer.TCPServer.Поэтому я переопределил конструктор по умолчанию класса TCPServer и добавил вызов ssl.wrap_socket (...):
class MyTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True):
# See SocketServer.TCPServer.__init__
# (added ssl-support):
SocketServer.BaseServer.__init__(self, server_address,
RequestHandlerClass)
self.socket = ssl.wrap_socket(
socket.socket(self.address_family, self.socket_type),
server_side=True,
certfile='cert.pem'
)
if bind_and_activate:
self.server_bind()
self.server_activate()
При запуске сервера ошибок не возникает.Поэтому я изменил свой простой тест-клиент для поддержки ssl:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock = ssl.wrap_socket(s)
sock.connect(('192.168.1.1', 54321))
Снова никаких ошибок не происходит, но вызов соединения блокируется.При закрытии клиента с помощью Ctrl + C он показывает следующее:
Traceback (most recent call last):
File "exampleClient.py", line 10, in <module>
sock.do_handshake()
File "/usr/lib/python2.6/ssl.py", line 293, in do_handshake
self._sslobj.do_handshake()
KeyboardInterrupt
Таким образом, do_handshake блокируется при подключении.Кто-нибудь знает, как решить проблему?Я просто хочу использовать зашифрованное TCP-соединение:)