gpt4 book ai didi

python - 使用 PKCS#11 在 Python 中提供 SSL 连接

转载 作者:行者123 更新时间:2023-12-03 11:49:23 25 4
gpt4 key购买 nike

我必须在基于 Linux 的固件上为嵌入式系统组件实现基于 Python 的 Web 服务器:

class WebServer(http.server.HTTPServer)
...
...

启用 SSL 连接 在服务器中创建一个 ssl 上下文
self.ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
self.ssl_context.load_cert_chain(certfile=cert, keyfile=key)
self.ssl_context.verify_mode = ssl.CERT_REQUIRED
self.ssl_context.load_verify_locations(verifyCert)

注意:cert 是证书的文件路径,keyfile 是私钥的路径。

根据请求调用 get_request 方法:
def get_request(self):
request = self.socket.accept()
if self.ssl_context:
req_socket, addr = request
connstream = self.ssl_context.wrap_socket(req_socket, server_side=True)
return connstream, addr
else:
return request

wrap_socket 方法用于将原始套接字包装成一个 ssl 套接字,而不是返回该套接字。这就是提供 ssl 连接的全部内容。

现在的问题:

该解决方案是第一个实现并且不安全。我们有义务使用给定的硬件安全模块 (HSM) 来创建和存储证书和私钥。任何私钥都是完全隐藏的,永远不会离开模块。所有密码原语都必须直接在模块内执行。 HSM 的接口(interface)是 PKCS#11,存在供应商提供的动态中间件库。

如何使用模块而不是原始 ssl 在 python 下设置 ssl 上下文?我已经知道,ssl 基于 openSSL,其中存在 PKCS#11 引擎(库 opensc-pkcs11.so)。供应商的中间件提供 PKCS#11 API。

不幸的是,我没有计划如何将 PKCS#11 引擎集成到 python 的 ssl/openSSL 中,以及如何将所有东西联系在一起。甚至可以透明地使用 PKCS#11 而不是 native 实现,如果可以,我如何从 python 激活它?此外,我将如何传递参数“certfile”和“keyfile”,因为两者都不再作为普通文件可用?事实上,我无法直接访问私钥;只有基于 URL 的对 HSM 中用于对其进行操作的对象的引用。

PyKCS11 可以代替 ssl 成为解决方案吗?

我只需要知道解决此类问题的基本途径。我可以自己找到所有详细信息。

最佳答案

不建议使用 Python 在网络服务器中执行此 TLS 内容。
最好使用 nginx 或 apache 来完成。
它们同时支持 pkcs#11 SSL 上下文,并且因为它们是用 C 编写的,所以可以快速协商 SSL。
所以要恢复:

  • 在 Python 端保持 HTTP(不安全)
  • 安装nginx或apache
  • 为 HTTPS 配置它:
  • 使用 pkcs#11 SSL 证书/ key (您的 HSM 的 pkcs#11 URI)
  • 将其反向代理到您的 HTTP(不安全)Python 网络服务器。

  • 关于python - 使用 PKCS#11 在 Python 中提供 SSL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170977/

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