我使用Python和OpenSSL使用TLS连接到一个站点(在一些跨平台的软件中,所以切换到CryptoAPI的工作量太大了); 但是,我不想分发(和更新)自定义证书列表.我想从平台上获取它们.在OS X和Linux上,这是相当简单的,但Windows附带了一个不完整的TLS可信根证书颁发机构列表; 基本上只是微软自己的证书,然后当高级TLS内容(例如通过HTTPS在Internet Explorer中加载网页)必须验证以前没有看到的信任根时,动态地将信任根添加到商店. (此过程在此处进行了解释.) 这意味着我可以枚举Windows根证书存储区wincertstore
,但它没用,因为在最近安装了较新操作系统的计算机上,该存储区几乎为空.
Microsoft 为管理员提供详细说明,以便预先检索此列表,以便能够操作具有严格控制的网络访问权限的计算机; 但是,我找不到任何可以执行相同操作的API的引用,只需从Microsoft下载所有受信任的根证书.(老实说,在每周多兆字节系统更新的时代,我不明白为什么预先下载这些是如此重要,如果它只是一个缓存;对于奖励积分,请解释为什么这需要发生.)
那么:是否有一个API允许我告诉系统根据它使用的任何规则预先缓存受信任的根证书?如果失败了,如果真的不可能(例如,如果CryptoAPI一次只能下载一个信任根,并且只有当你提供由该根签名的证书),是否有办法将OpenSSL证书验证连接到CryptoAPI的信任存储区,以便验证将下载和缓存信任根,就像本机TLS连接一样?