【发布时间】:2021-08-26 19:37:42
【问题描述】:
我正在尝试建立一个安全的 websocket 服务器。
但是,每当我尝试使用 SSL 保护它时,我都会遇到错误 [注意:如果我没有启用 SSL,它会起作用]
使用当前设置,客户说[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_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,它将它重定向到我家中的服务器
Cloudflare Worker:https://ganer.xyz/s/yQKyhz
Cloudflare 证书 [这些适用于我的主网站]:https://ganer.xyz/s/iqmjim
Nginx VPS 配置:https://ganer.xyz/s/FiGzaK
编辑,修复:基本上,我废弃了工人并重新做了一些 NGINX 的东西。端口 80 转到 nginx,它重定向到我的家庭服务器上的端口 87。 Socket.ganer.xyz 只是一个指向 VPS 的 A 记录
新配置:https://ganer.xyz/s/X2IKnJ
并将客户端上的 SSL 上下文替换为 ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
【问题讨论】:
-
origin.pem的内容是什么?确保它也包含所有中间证书。 -
是cloudflare源证书ganer.xyz/s/DUCV9Z
标签: python nginx ssl websocket cloudflare