【问题标题】:Struggling with Secured Python Websockets [closed]挣扎于安全的 Python Websockets [关闭]
【发布时间】: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


【解决方案1】:

这是 cloudflare 原始证书

Cloudflare 原始证书仅受 Cloudflare 信任。它们不是由公开颁发的 CA 颁发的,这就是默认情况下它们不受 Python 信任的原因。

ssl_context.load_verify_locations('origin.pem')

此行不使用受信任的证书建立连接。相反,它信任给定证书颁发的任何证书。由于这是一个休假证书,它不能颁发任何证书。您需要信任相关的根 CA,并确保服务器发送所有相关的中间证书。

【讨论】:

  • 我应该怎么做才能解决这个问题?
  • @Ganer:引用我自己的话:“您需要改为信任相关的根 CA,并确保服务器发送所有相关的中间证书。”
  • 是的,但是我该怎么做,我对这一切基本上一无所知
  • @Ganer:相关的根CA可以在here找到。在ssl_context.load_verify_locations 中使用它而不是origin.pem
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2021-08-05
  • 2012-01-06
  • 2012-12-29
相关资源
最近更新 更多