ssl socket wrapper returns 连接错误

ssl socket wrapper returns error on connect

打开 ssl-wraped 套接字时,出现错误 ssl.SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:581)

服务器是 运行 TLSv1.1

我的密码是

import socket, ssl
uw = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(uw, ssl_version=ssl.PROTOCOL_TLSv1_1)
s.connect((host, port))

我想不通。我试过使用 cacert 文件并得到同样的错误。

s = ssl.wrap_socket(uw, ca_certs="cacert.pem", cert_reqs=ssl.CERT_REQUIRED)

不是ssl套接字,而是内部套接字本身。因此,在构造 uw 套接字时指定系列和协议,如:

uw = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

请注意,以上只是在 IPV4 (AF_INET) 上工作的 TCP (SOCK_STREAM) 套接字的示例。

好的 找到我的问题:端口错误。我连接的是普通端口,而不是 SSL 封装端口。

我有同样的错误。 您应该为 HTTPS 使用端口 443。 我还在用 80 端口。

parsed = urlparse.urlparse(url)
PORT = 443 
HOST = parsed.netloc
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(sock,ssl_version=ssl.PROTOCOL_SSLv23,ciphers="")
s.connect((HOST, PORT))

s.sendall('GET '+parsed.geturl()+ ' HTTP/1.1\r\n'\
        +'Host: '+HOST+'\r\n'
        +'\r\n')

data = ""
while True:
    res = s.recv(4096)
    if not res:
        break
    data += res 
s.close()