pyOpenSSL:连接的协议版本错误

时间:2018-11-25 23:37:04

标签: python openssl pyopenssl

环境:

Python 3.7(Windows上为Anaconda 5.3.1)
pyOpenSSL 18.0
SSL.SSLEAY_VERSION:OpenSSL 1.0.2p 2018年8月14日

我有一个套接字,用于一些未加密的通信,然后由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 :(得分:0)

进一步调查后,我将自己回答问题。 ClientHello消息的记录层中的TLS 1.0 (0x0301)在OpenSSL中是expected

我收到了wrong version number,因为请求没有在服务器端正确路由,因此响应不是有效的ServerHello消息。