2012-04-01 188 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

相關問題