2012-04-01 27 views
5

Bu muhtemelen başka bir çözümlenmemiş iş parçacığı olacaktır, ancak yine de bazı bilgileri gireceğim.Python - SSL - sürüm numarası

SSL sarıcımı bir süreliğine bile alamıyorum. Benim wrap_socket() ve do_handshake() ile yanlış yaptığım herhangi bir fikrin var mı?

Anahtar dosyalar% 100 mükemmel gibi görünüyor ve el sıkışmasından önce .recv() olmadan AND ile denedim. Sadece üretir i recv() koymak yere bağlı bu: o belli değil veya i yanılıyorsam Kayıt için

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 

, başarısız :)

tokalaşma var

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) 

Şimdi ben newsocket.recv (32) ile elde:

Ben SSLv3 çalışıyor ve aynı zamanda sarma biraz konumunu değiştirmek, kod biraz değiştirilmiş Ayrıca

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

:

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

olmadani Twisted kullanmayı reddetme

Ölçekleme ortalık:

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) 

Bu "yerli" gibi iyi çalışır ssl kütüphanesi. ben şimdi yaşıyorum nerede

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


budur: Ancak şimdi bu hatası alıyorum

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

Bu Firefox'ta "prefectly" çalışır, ancak Google Chrome'da DEĞİL. Neden? fark ne? -.-

+0

@Toxed etkinleştirin: cevap – Cratylus

cevap

3

Kodunuzda bir sorun olup olmadığını öğrenmek için Python'u hiç bilmiyorum.
Hata olsa da açık. İstemci SSLv3 ve sunucunuzu yalnızca TLSv1 desteklemektedir.
SSLv3 desteğini etkinleştirmeli veya istemcinizi yükseltmelisiniz.

Bu çizgi şu şekilde görünüyor: ssl_version=ssl.PROTOCOL_TLSv1. Belki de SSLv3'u buradan da ekleyebilirsiniz?

Güncelleme:
Tarayıcınız arasında sorun olduğunu görüyorum. Crome’da SSLv3 etkin olup olmadığını görün. Örneğin, bu, Internet Options ->Advanced Tab'un altındadır.
Chrome'da benzer bir şey olmalıdır.SSv3 dışı bırakma ve TLSv1 yerine

+0

yılında güncelleştirme bakın ** SSL rutinleri: SSL3_GET_RECORD: tokalaşma yapılmadan önce recv() İLE yanlış sürüm numarası **, ve onsuz i olsun ** _ ssl.c : 490: İşlem tamamlanmadı (okuma) ** – Torxed

+0

Kullanarak ** ssl_version = ssl.PROTOCOL_SSLv3, ** – Torxed

+0

FireFox'ta SSLv3 çalışmalarını kaldırma. SSLv3 daha sonra TLSv1 daha büyüktür, bu yüzden TLSv1 – Torxed

İlgili konular