gpt4 book ai didi

authentication - 使用 Twisted 通过客户端证书身份验证保护 Websockets

转载 作者:行者123 更新时间:2023-12-04 02:56:41 25 4
gpt4 key购买 nike

我想知道是否有一个选项可以使用 twisted 实现安全的 websockets (wss://) 和基于客户端证书的身份验证?

我按照 http://twistedmatrix.com/documents/12.3.0/core/howto/ssl.html 上的说明进行操作,其中描述了通过 https://和客户端证书设置站点。使用自签名证书,效果很好。然而,当 Websockets 发挥作用时,事情就变得棘手了。

在 IE 10 中运行整个程序工作正常。客户端使用他的证书进行身份验证并获得对站点的访问权限,并可以打开 Websocket。但是,FF 和 Chrome 将无法运行。请注意,webserver 和 websocket 在同一端口上运行。

在我看来,IE 似乎以某种方式存储了客户端的身份验证并将其用于访问 websocket。 FF 和 Chrome 以某种方式将 websocket 视为不同的资源,之前没有进行过身份验证。

有没有人遇到过相同或类似的问题,或者可能为此实现了解决方案?

如果需要,我可以提供目前的源代码。

最佳答案

对于所有遇到同样问题的感兴趣的读者,我终于弄明白了。解决方案是为 ssl 上下文设置一个 session ID。然后浏览器似乎会记住 cert 身份验证,即使对于像 websockets 这样的子资源也是如此。

应该这样做:

contextFactory = twisted.internet.ssl.DefaultOpenSSLContextFactory('keys/server.key',
'keys/server.crt')


ctx = contextFactory.getContext()
ctx.set_verify(
OpenSSL.SSL.VERIFY_PEER | OpenSSL.SSL.VERIFY_CLIENT_ONCE,
verifyCallback
)
## Since we have self-signed certs we have to explicitly
## tell the server to trust them.
ctx.load_verify_locations("keys/ca.crt")
ctx.set_session_id("id")

第 1-8 行无论如何都是需要的。新的是第 9 行。在这里你必须设置一个 session ID。

关于authentication - 使用 Twisted 通过客户端证书身份验证保护 Websockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16564429/

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