我想要做什么以及为什么需要一段时间来解释的完整解释。基本上,我想在公共分布式应用程序中使用私有 SSL 连接,而不是分发我的私有 ssl 密钥,因为这否定了目的!即,我想要没有人能看到的安全远程数据库操作——包括客户端。
我的核心问题是:如何让 Python ssl 模块使用包含 ssl pem 文件内容的内存中保存的数据,而不是它们的硬文件系统路径?
SSLSocket 类调用的构造函数,因为它们是 .pyd 文件load_verify_locations(ca_certs)
,load_cert_chain(certfile, keyfile)
所以我无法追踪。在那些黑匣子中,我假设这些文件被读入内存。我怎样才能使过程短路并直接传递数据?(也许换掉.pyd?...)
我的其他想法是:我可以io.StringIO
用来创建一个虚拟文件,然后传递文件描述符。我已经将该概念与将采用描述符而不是路径的类一起使用。不幸的是,这些类不是这样设计的。
或者,也许使用虚拟文件系统/内存驱动器?不过这可能会很麻烦,因为我需要它是跨平台的。另外,如果有人可以从任何外部程序访问这些路径,那可能会否定我正在尝试做的事情......
我想我可以将它们保留为真实文件,但将它们“隐藏”在文件系统中的某个位置。
我不可能是第一个遇到这个问题的人。
更新
我找到了“黑匣子”的来源......
https://github.com/python/cpython/blob/master/Modules/_ssl.c
他们按预期工作。他们只是从路径中读取文件内容,但你必须深入到 C 层才能做到这一点。
我可以用 C 编写代码,但我从未尝试过重新编译底层 Python 源代码。看起来也许我应该按照这里的说明https://devguide.python.org/来提取 Python 存储库并进行更改。我想我可以将我的更新提交给 Python 社区,看看他们是否想要像我描述的那样制作一个新的标准化功能......看起来还有很多工作要做......