尝试发出发布请求时,我收到了 403 响应,其中包含消息“Http 请求中不存在客户端证书”。 我尝试使用 verify=False 发出请求,但我仍然遇到同样的问题。
这是我正在发出的获取请求
r = requests.post('https://www.ezcardinfo.com/api/Login/ValidateUsername', params={'userName': my_user_name, 'devicePrint': devicePrint}, headers=header)
现在,我不知道从哪里获得客户端证书或一般如何获得证书。我有 pyopenssl 和 certifi,并通过输入找到我的 request_ca_bundle 的路径
certifi.where()
当我设置 verify='path/to/request_ca_bundle' 时,我仍然收到 403 错误。
最佳答案
... No Client Certificate present in Http Request
这意味着服务器需要客户端使用证书对自己进行身份验证。在这种相互认证中,不仅服务器向客户端出示证书,然后由客户端验证,而且客户端还需要向服务器出示自己的证书。
不经常使用客户端证书。如果使用它们,通常需要您从特定的 CA 获得证书,或者您生成一些证书并将其与您的帐户相关联的证书。详细信息取决于实际站点,您必须查看他们的文档或联系他们了解详细信息。
I tried making the request with verify=False ...
这只会禁用服务器证书的验证,因此对客户端证书相关问题没有影响。
When I set verify='path/to/request_ca_bundle' I still get the 403 error.
这仅设置验证服务器证书所需的受信任 CA,因此对客户端证书相关问题没有影响。
请注意,使用浏览器访问特定 URL 时也会出现相同的错误。如果您的浏览器没有出现此错误,则您可能在那里安装了必要的证书。在这种情况下,您需要导出证书和 key ,然后您可以在 cert
参数中使用它,参见 Client Side Certificates在文档中。
关于Python 请求 "No Client Certificate present in Http Request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47252674/