使用证书存储而不是文件路径将证书加载到ssl中;用python

时间:2019-03-18 20:45:13

标签: python windows ssl

我正在python中使用ssl模块,具体是这样:

SSLContext.load_cert_chain

使用此命令的大多数示例显示使用文件路径作为前两个参数,例如:

context.load_cert_chain("/path/to/cert.pem", "/path/to/key.pem", password=password)

如果这些证书存储在Windows证书存储区中怎么办? (CA,根目录等)。我是否仍可以检索然后使用文件路径传递给上述方法?

1 个答案:

答案 0 :(得分:1)

简短的回答:这并不容易。

ssl模块可以通过ssl.enum_certificates来访问Windows证书存储区,但这是非常有限的,并且不提供对私钥的访问(甚至可以将其标记为不可导出)。

Windows证书存储区自动用于客户端连接,以验证服务器证书。但是您不能轻易地使用它来创建服务器端上下文。

如果要在Windows证书存储区中存储密钥和证书,则需要使用Windows SSPI(SChannel)API来实现TLS层。在这种情况下,python ssl模块无济于事。 SSPI提供了类似于ssl.SSLObject的API,该API包装了OpenSSL MemoryBIO协议,因此从理论上讲,可以在Win32 API之上而不是Openssl API上实现ssl.SSLObject

https://docs.microsoft.com/en-us/windows/desktop/secauthn/creating-a-secure-connection-using-schannel