Python TLSV1_ALERT_PROTOCOL_VERSION при выполнении ssl-переноса tcp-сокета
Я создаю прокси-сервер tcp, который должен иметь возможность перехватывать связь между клиентом GUI и службой / сервером.
В качестве рабочей базы для прокси я использую код из https://github.com/nccgroup/tcpprox/blob/master/prox.py.
Протокол, с которым должен работать прокси-сервер, может в какой-то момент переключаться на сокеты ssl. Поэтому проблема заключается в том, что я не могу просто начать с ssl-сокетов в начале, а также не могу полностью перезапустить соединение.
Поэтому я хочу сделать ssl.wrap_socket
когда я получил команду переключиться на ssl.
На данный момент это выглядит следующим образом в Socket UI <=> Proxy
# creation of the socket
sock_a = socket.socket(AF_INET, SOCK_STREAM)
sock_a.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sock_a.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
sock_a.bind((addr,port))
sock_a.listen(5)
sock_a.setblocking(0)
# and later when working with the socket (writeSome or copy functions)
sock_a = ssl.wrap_socket(sock_a ,ciphers="ALL", server_side=True,
ssl_version=ssl.PROTOCOL_TLSv1_2, certfile=CERT_FILE, keyfile=KEY_FILE)
и это на сервисе Socket Proxy <=>
# creation of the socket
sock_b = socket.socket(AF_INET, SOCK_STREAM)
sock_b.connect((addr,port))
sock_b.setblocking(0)
# and later when working with the socket (writeSome or copy functions)
sock_b = ssl.wrap_socket(sock_b ,cert_reqs=ssl.CERT_NONE,
ciphers="ALL", ssl_version=ssl.PROTOCOL_TLSv1_2,
certfile=CERT_FILE, keyfile=KEY_FILE)
К сожалению, это не удается по следующей причине при выполнении обтекания
ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] версия протокола оповещения tlsv1 (_ssl.c:833)
Я уже пытался поиграться с параметрами сокета и ssl_wrap (например, изменить ssl_version на другие версии TLS или удалить этот параметр), а также протестировал обертку на сокете, непосредственно действующем как клиент и подключающемся к сервису, который работал безупречно.
Что-то мне не хватает в этой модели? На данный момент я даже не знаю, как приступить к отладке этого.
Я использую Python 3.6.5 на Ubuntu 16.04 с версией ssl OpenSSL 1.0.2g 1 марта 2016