pyOpenSSL: неверная версия протокола для соединения - PullRequest
0 голосов
/ 26 ноября 2018

Среда:

Python 3.7 (Anaconda 5.3.1 в Windows)
pyOpenSSL 18.0
SSL.SSLEAY_VERSION: OpenSSL 1.0.2p 14 августа 2018

У меня есть сокет, который используется для некоторой незашифрованной связи, а затем оборачивается pyOpenSSL:

sock = socket.socket()
sock.connect((address, port))
sock.send(msg)

context = SSL.Context(SSL.TLSv1_2_METHOD)
conn = SSL.Connection(context, sock)
conn.set_connect_state()
conn.do_handshake()

Я ожидаю, что протокол будет TLS 1.2, который указан для объекта контекста, но Wireshark показывает следующее:

Secure Sockets Layer
    TLSv1 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 302
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 298
            Version: TLS 1.2 (0x0303)

И я получаю:

Error: [('SSL routines', 'SSL3_GET_RECORD', 'wrong version number')]

Полагаю, ошибка связана с тем, что используется TLS 1.0, но я не понимаю, откуда она взялась?Если я проверю conn.get_protocol_version_name(), он покажет TLSv1.2

Есть идеи?

1 Ответ

0 голосов
/ 02 декабря 2018

После дальнейшего расследования я собираюсь ответить на вопрос самостоятельно.TLS 1.0 (0x0301) в слое записи сообщения ClientHello ожидается в OpenSSL.

Я получил wrong version number, поскольку запрос не был правильно перенаправлен на стороне сервера, поэтому ответ не былдействительное сообщение ServerHello.

...