ssl socket wrapper在连接时返回错误

时间:2015-05-09 22:43:58

标签: python ssl

打开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)

3 个答案:

答案 0 :(得分:1)

Ok发现我的问题:错误的端口。我连接到普通端口而不是SSL包装端口。

答案 1 :(得分:0)

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

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

请注意,以上只是仅适用于IPV4(SOCK_STREAM)的TCP(AF_INET)套接字的示例。

答案 2 :(得分:0)

我有同样的错误。 您应该使用端口443进行HTTPS。 我还在使用端口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()