gpt4 book ai didi

Python - SSL - 错误的版本号

转载 作者:太空狗 更新时间:2023-10-29 18:07:19 25 4
gpt4 key购买 nike

这可能只是另一个 Unresolved 话题,但无论如何我都会填写一些信息。

我连一秒钟都无法将我的 SSL 包装在一起。对我的 wrap_socket() 和 do_handshake() 做错了什么有什么想法吗?

key 文件似乎是 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)

此外:我拒绝使用 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 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))

这在 Firefox 中“完美”工作,但在 Google Chrome 中。为什么?有什么不同? -.-

最佳答案

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

这一行似乎是问题所在:ssl_version=ssl.PROTOCOL_TLSv1。也许您还可以在此处添加 SSLv3

更新:
我看到你在浏览器之间有问题。查看 Crome 中是否启用了 SSLv3
例如,在 IE 中,它位于 Internet 选项-> 高级选项卡 下。
类似的东西应该在 Chrome 中。禁用 SSv3 并启用 TLSv1

关于Python - SSL - 错误的版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com