【问题标题】:What's the right way for a Python/Twisted program to validate an SSL certificate under Windows?Python/Twisted 程序在 Windows 下验证 SSL 证书的正确方法是什么?
【发布时间】:2010-11-10 13:49:17
【问题描述】:
有没有办法让 Python/Twisted 程序干净地利用 Internet Explorer 用来验证与 HTTPS 服务器的 SSL 连接的根证书列表?提供给Validate SSL certificates with Python 的答案非常有帮助,但示例代码通过读取 Unix 特定目录 /etc/ssl/certs/*.pem 来获取根证书,我不清楚 Windows 相当于什么。
【问题讨论】:
标签:
python
windows
ssl
twisted
【解决方案1】:
Windows 等效项是“从您的 Linux 机器复制 /etc/ssl/certs/*.pem”。 Mac 和 Windows 有不同的原生 API 用于获取各自的证书存储区,而 Twisted 并不直接支持这些 API。他们本身不使用OpenSSL 证书,而且他们当然不会像“PEM 文件目录”那样将内容放在简单的布局中。如果您可以将信任根导出为 PEM,那么您可以要求 Twisted(嗯,真的,OpenSSL 通过PyOpenSSL)以这种方式进行验证。
我对以超级便携的方式进行此操作非常感兴趣,但我从未真正尝试过。以下是一些帮助您入门的链接:SecureTransport reference、Microsoft Cryptography Functions。
在 SecureTransport 参考中,文档指出 SSLGetTrustedRoots 已被弃用,但没有提及替代的 SSLCopyTrustedRoots 不是。这可能是您想在 Mac 上开始使用的 API(通过 PyObjC)。在 Windows 上,我真的不确定,除了在那一堆函数中的某个地方,可能有一个可以做你想做的事情,也许你可以用 ctypes 来调用它:)。