使用Python请求的SSL客户端身份验证

时间:2017-07-21 09:14:59

标签: python security ssl https python-requests

我正在使用Python的requests库来执行client side authentication with certificates。方案如下:CA1已为中间CA颁发证书(CA2),CA2已颁发我的客户证书CLIENT。我正在连接的服务器信任CA1的证书(但没有CA2的证书)。当我使用时:

requests.get('https:..', cert=('/path/CLIENT.cert', '/path/CLIENT.key'))

我收到错误“证书验证失败”。我认为这是因为服务器无法检索CA2的证书。

但是,我无法找到将CA2的证书发送到服务器的方法。如果我将其包含在CLIENT中,则会收到有关私钥和证书不匹配的错误消息。我还尝试在verify参数中包含证书链,但结果似乎没有任何差别(据我所知,verify参数中的证书用于服务器边认证)。

虽然我认为这一定是一种非常常见的情况,但我无法找到解决方案......

PD:如果我使用openssl和完整的证书链验证CLIENT的证书,则验证成功(因此证书本身没有问题)。

1 个答案:

答案 0 :(得分:0)

请求建议使用certifi作为CA捆绑包。您是否尝试过安装certifi,添加CA1,并将certifi捆绑路径传递给requests