与安全的pythonwebsockets抗争
我正在尝试设置一个安全的websocket服务器。 然而,每当我尝试使用SSL保护它时,我都会出现错误[注意:如果我没有启用SSL,它就会工作] 使用此当前设置时,客户端会显示与安全的pythonwebsockets抗争,python,nginx,ssl,websocket,cloudflare,Python,Nginx,Ssl,Websocket,Cloudflare,我正在尝试设置一个安全的websocket服务器。 然而,每当我尝试使用SSL保护它时,我都会出现错误[注意:如果我没有启用SSL,它就会工作] 使用此当前设置时,客户端会显示[SSL:CERTIFICATE\u VERIFY\u FAILED]CERTIFICATE VERIFY FAILED:无法获取本地颁发者证书(\u SSL.c:1129) 服务器: import websockets, asyncio, ssl async def hello(s, path): data =
[SSL:CERTIFICATE\u VERIFY\u FAILED]CERTIFICATE VERIFY FAILED:无法获取本地颁发者证书(\u SSL.c:1129)
服务器:
import websockets, asyncio, ssl
async def hello(s, path):
data = await s.recv()
await s.send(data)
print("Got data:", data)
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain('origin.pem', 'private.pem')
start_server = websockets.serve(hello, "0.0.0.0", 87, ssl = ssl_context)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
客户:
import websockets, asyncio, ssl
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
ssl_context.load_verify_locations('origin.pem')
async def hello():
async with websockets.connect("wss://socket.ganer.xyz/gsdgsdfg", ssl = ssl_context) as s:
await s.send("Test")
print("Got data:", await s.recv())
asyncio.get_event_loop().run_until_complete(hello())
我的安装程序在端口87上运行,wss://socket.ganer.xyz
指向运行nginx的VPS,该VPS会将其重定向到我家的服务器
Cloudflare Worker:
Cloudflare证书[这些证书适用于我的主网站]:
Nginx VPS配置:
编辑,修复:基本上,我放弃了工人,重新编辑了一些NGINX的东西。端口80转到nginx,nginx重定向到my home server上的端口87。Socket.ganer.xyz只是一个指向VPS的A记录
新配置:
并将客户端上的SSL上下文替换为以下内容:SSL.create\u default\u context(purpose=SSL.purpose.SERVER\u AUTH)
这是cloudflare原产地证书 Cloudflare源证书仅受Cloudflare信任。它们不是由公开发布的CA发布的,这就是Python默认不信任它们的原因
此行不使用受信任的证书建立连接。相反,它信任给定证书颁发的任何证书。由于这是休假证书,因此无法颁发任何证书。您需要信任相关的根CA,并确保服务器发送所有相关的中间证书。origin.pem的内容是什么?请确保您也包括所有中间证书。这是cloudflare源证书。我该怎么做才能解决这个问题?@Ganer:引用我自己的话:“您需要信任相关的根CA,并确保服务器发送所有相关的中间证书。”是的,但我该怎么做,我基本上对这一切一无所知this@Ganer:可以找到相关的根CA。在
ssl\u上下文中使用此选项。加载\u验证\u位置
而不是您的origin.pem
。
ssl_context.load_verify_locations('origin.pem')