打开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)
答案 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()