2012-04-01 190 views
5

这可能只是另一个未解决的线程,但我会填写一些信息。Python - SSL - 错误的版本号

我无法让我的SSL包装在一起,甚至没有一秒钟。 任何想法,我做错了我的wrap_socket()和do_handshake()?

关键文件看起来是100%完美的,我在握手之前使用AND尝试了没有.recv()。 这只是产生这些不同的地方我把的recv():

SSL3_GET_CLIENT_HELLO:wrong version number

SSL3_GET_RECORD:wrong version number

class Server(): 
    def __init__(self, listen = '', port = 8080, ssl = False): 
     self.sock = socket.socket() 
     self.sock.bind((listen, port)) 
     self.sock.listen(5) 

    def accept(self): 
     newsocket, fromaddr = self.sock.accept() 
     newsocket.recv(32) 
     newsocket.setblocking(0) 
     sslsock = ssl.wrap_socket(newsocket, 
            server_side=True, 
            certfile="./kernel/sock/server.crt", 
            keyfile="./kernel/sock/server.key", 
            cert_reqs=ssl.CERT_NONE, 
            ssl_version=ssl.PROTOCOL_TLSv1, 
            do_handshake_on_connect=False, 
            suppress_ragged_eofs=True) 
     sslsock.do_handshake() 
     return sslsock, fromaddr 

为了记录在案,如果不是明显的或我错了,那就是失败:)

握手我修改一下代码,试图在SSLv3,改变它的包装一点的位置:

import socket, ssl, time, select 

class Server(): 
    def __init__(self, listen = '', port = 443, ssl = False): 
     self.sock = socket.socket() 
     self.sock.bind((listen, port)) 
     self.sock.listen(5) 

    def accept(self): 
     self.sock = ssl.wrap_socket(self.sock, 
            server_side=True, 
            certfile="./kernel/sock/server.crt", 
            keyfile="./kernel/sock/server.key", 
            cert_reqs=ssl.CERT_NONE, 
            ssl_version=ssl.PROTOCOL_SSLv3, 
            do_handshake_on_connect=False, 
            suppress_ragged_eofs=True) 

     newsocket, fromaddr = self.sock.accept() 

     print [newsocket.recv(32)] 
     newsocket.setblocking(False) 
     newsocket.do_handshake() 

     return newsocket, fromaddr 

s = Server() 
ns, na = s.accept() 
print ns.recv(1024) 

现在我与newsocket.recv(32)得到:

ssl.SSLError: [Errno 1] _ssl.c:1331: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure

,无:

ssl.SSLError: [Errno 2] _ssl.c:490: The operation did not complete (read)

另外:我拒绝使用双绞线

缩放下来的东西:

import socket, ssl, time, select 
from OpenSSL import SSL 

class Server(): 
    def __init__(self, listen = '', port = 443, ssl = False): 
     ctx = SSL.Context(SSL.SSLv23_METHOD) 
     ctx.use_privatekey_file("server.pem") 
     ctx.use_certificate_file("server.pem") 
     self.sock = SSL.Connection(ctx, socket.socket()) 

     self.sock.bind((listen, port)) 
     self.sock.listen(5) 

    def accept(self): 
     newsocket, fromaddr = self.sock.accept() 
     return newsocket, fromaddr 

s = Server() 
ns, na = s.accept() 
print ns.recv(1024) 

这个工程就像 “原生” 的好ssl库。 但是现在我得到这个错误:

OpenSSL.SSL.Error: [('SSL routines', 'SSL23_READ', 'ssl handshake failure')]


这是我在哪里现在:

import socket, ssl, time #, select 

class Server(): 
    def __init__(self, listen = '', port = 443, ssl = False): 
     self.sock = socket.socket() 
     self.sock.bind((listen, port)) 
     self.sock.listen(5) 

    def accept(self): 
     self.ssl_sock = None 
     while not self.ssl_sock: 
      self.ssl_sock = ssl.wrap_socket(self.sock, 
       server_side=True, 
       certfile=r"C:\moo.pem", 
       keyfile=r"C:\moo.key", 
       cert_reqs=ssl.CERT_NONE, 
       ssl_version=ssl.PROTOCOL_TLSv1) 

     newsocket, fromaddr = self.ssl_sock.accept() 

     print([newsocket.recv()]) 

     return newsocket, fromaddr 

s = Server() 
ns, na = s.accept() 
print(ns.recv(1024)) 

这工作 “prefectly” 在Firefox,但谷歌浏览器不。 为什么?有什么不同? -.-

+0

@Toxed:请参阅更新回答 – Cratylus 2012-04-03 16:53:33

回答

3

我根本不知道Python来告诉你,如果你的代码有问题。
虽然错误很明显。客户端支持SSLv3,而您的服务器仅支持TLSv1
因此,您应该启用SSLv3的支持或升级客户端。

此行似乎是问题:ssl_version=ssl.PROTOCOL_TLSv1。也许你也可以在这里添加SSLv3

更新:
我看到你在浏览器之间有问题。查看Crome中是否启用SSLv3
在IE中,例如这是在Internet Options->Advanced Tab下。
在Chrome中应该有类似的东西。禁用SSv3并启用TLSv1而不是

+0

** SSL例程:SSL3_GET_RECORD:错误的版本号**在握手之前使用recv(),没有它我得到** _ ssl.c :490:操作未完成(读取)** – Torxed 2012-04-01 10:50:34

+0

使用** ssl_version = ssl.PROTOCOL_SSLv3,** – Torxed 2012-04-01 10:50:53

+0

在FireFox中删除SSLv3工程。 SSLv3比TLSv1更老,所以我宁愿坚持使用TLSv1 – Torxed 2012-04-01 21:01:57

相关问题