簡體   English   中英

Python - SSL - 錯誤的版本號

[英]Python - SSL - wrong version number

這可能只是另一個未解決的線程,但無論如何我會填寫一些信息。

我甚至連一秒鍾都無法將我的SSL包裝在一起。 對我的wrap_socket()和do_handshake()做錯了什么想法?

關鍵文件似乎100%完美,我在握手之前嘗試過沒有.recv()的AND。 這只是根據我放置recv()的位置生成這些:

SSL3_GET_CLIENT_HELLO:版本號錯誤

SSL3_GET_RECORD:版本號錯誤

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:錯誤:140940E5:SSL例程:SSL3_READ_BYTES:ssl握手失敗

沒有:

ssl.SSLError:[Errno 2] _ssl.c:490:操作沒有完成(讀取)

另外: 我拒絕使用Twisted

縮小規模:

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例程','SSL23_READ','ssl握手失敗')]


這就是我現在所處的位置:

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,而不是在谷歌瀏覽器。 為什么? 有什么不同? -.-

如果您的代碼中存在問題,我根本不知道Python會告訴您。
但錯誤很明顯。 客戶端支持SSLv3而您的服務器僅支持TLSv1
因此,您應該啟用對SSLv3支持或升級您的客戶端。

這一行似乎是問題所在: ssl_version=ssl.PROTOCOL_TLSv1 也許你也可以在這里添加SSLv3

更新:
我發現瀏覽器之間存在問題。 查看Crome中是否啟用了SSLv3
例如,在IE中,這是在Internet Options - > Advanced Tab
類似的東西應該在Chrome中。 禁用SSv3並改為啟用TLSv1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM