我需要从python访问一个API,它在进行TLS连接时不提供正确的bundle。我发现work-around有效,但我认为它不稳定。
假设api.example.org是使用来自CA1的证书的破坏设置,并且www.example.org是正确的设置,但其CA2的证书。
以下作品
requests.get('https://api.example.org/', verify='/path/to/CA1_BUNDLE')
requests.get('https://www.example.org/')
但这不起作用: -
requests.get('https://www.example.org/', verify='/path/to/CA1_BUNDLE')
意味着如果verify='/path/to/CA1_BUNDLE'
存在,它只会针对该特定CA进行验证,而不会验证我系统中安装的任何其他CA.如果api.example.org修复了他们的垃圾,并从不同的CA获得证书,那么我的生产代码将停止工作。
在进行验证时,这是告诉请求使用系统证书以及 /path/to/CA1_BUNDLE
的方法吗?
PS:请不要建议我使用verify=false
。这是2016年而不是2008年。
更新:我不再需要解决方案,有问题的网站修复了他们的垃圾。然而,一个优雅的解决方案仍然会因好奇心而受到赞赏。