यह शायद एक और अनसुलझा धागा होगा लेकिन मैं वैसे भी कुछ जानकारी भर दूंगा।पायथन - एसएसएल - गलत संस्करण संख्या
मैं अपने एसएसएल रैपिंग को एक सेकंड के लिए भी नहीं मिला। मेरे wrap_socket() और do_handshake() के साथ मैं क्या गलत कर रहा हूं, इसके बारे में कोई विचार?
कुंजी फ़ाइलें 100% सही दिखाई देती हैं, और मैंने हैंडशेक से पहले .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)
यह बस के रूप में "मूल" के रूप में अच्छा काम करता है एसएसएल पुस्तकालय।
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" फ़ायरफ़ॉक्स में है, लेकिन नहीं गूगल क्रोम में। क्यों? क्या फर्क पड़ता है? -.-
@Toxed सक्षम: इस सवाल का जवाब – Cratylus