Python 请求 "No Client Certificate present in Http Request"

标签 python ssl python-requests pyopenssl

尝试发出发布请求时,我收到了 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/

相关文章:

java - 如何从java验证SSL?

python - 使用 Python 中的 POST 请求通过网站表单上传基本文件

python - 在 Python 中使用 asyncio 并行化 Web 任务

python - Jira POST 和 PUT Rest 调用从 Python 返回错误 400

python - Fiddler 没有捕获我脚本的请求

python - 部署 Dash 应用程序时出现 Heroku 应用程序错误

python - 使用 Python 创建数字每次都变大的列表

Python:为什么使用 FFT 方法去除频率似乎没有去除数据的周期性?

python-3.x - 在 VSCode 虚拟环境中安装 numpy 时,pip 配置了需要 TLS/SSL 的位置

ssl - startssl 证书不与 Postfix 和 dovecot 一起运行