当前位置: 首页 > 知识库问答 >
问题:

如何让Python请求信任自签名SSL证书?

法弘亮
2023-03-14
import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

如果URL使用自签名证书,则在以下情况下失败

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我知道我可以将False传递给verify参数,如下所示:

r = requests.post(url, data=data, verify=False)

但是,我想做的是将请求指向磁盘上的公钥副本,并告诉它信任该证书。

共有3个答案

卫和洽
2023-03-14

最简单的方法是导出变量REQUESTS\u CA\u BUNDLE,该变量指向您的私有证书颁发机构或特定的证书捆绑包。在命令行上,可以按如下方式执行此操作:

export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem
python script.py

如果您拥有证书颁发机构,并且不想每次都键入导出,则可以将请求\u CA\u BUNDLE添加到~/。bash_简介如下:

echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile
郭辉
2023-03-14

使用verify参数,可以提供自定义证书颁发机构捆绑包

requests.get(url, verify=path_to_bundle_file)

从文档:

您可以将路径传递到具有可信CA证书的CA_BUNDLE文件。还可以通过REQUESTS_CA_BUNDLE环境变量指定受信任CA的此列表。

申屠锦
2023-03-14

尝试:

r = requests.post(url, data=data, verify='/path/to/public_key.pem')
 类似资料:
  • 问题内容: 如果URL使用自签名证书,则失败并显示 我知道我可以像这样传递给参数: 但是,我想做的是将请求指向磁盘上的公共密钥副本,并告诉它信任该证书。 问题答案: 尝试:

  • 我已经为我的服务器生成了自我签名的证书。然后用设置->安全->安装添加到Android中。 据我所知,在我将证书添加到受信任的列表中之后,它应该可以很好地工作。我是不是漏掉了什么?其思路是通过Android系统添加证书,无需修改应用程序代码。 顺便说一句,我使用进行网络连接。也许我应该启用连接?

  • 我想通过SSL连接到我的服务器。因此,我使用以下命令在服务器上生成证书: 如果我使用如下所示的TrustManager信任客户端上的所有证书,则连接可以正常工作: 但我当然不想相信所有的证书,而只相信我的证书。我尝试了以下几个命令来导入证书: 我要怎么做才能让它正常工作?有人能解释一下对一个不是很熟悉cryto领域的人所必需的步骤吗? 编辑:正如Donal Fellows所建议的那样,我尝试了自定

  • > 。 有些帖子说x509是用来生成自签名证书的。 但使用时出错: 请告诉我哪条路是正确的。如果是正确的,如何解决错误?非常感激!

  • 我正试图将我的计算机配置为信任用于测试网站的自签名证书。然而,我在Firefox上遇到了一些问题。Chrome和IE都没问题。 我做了以下几点。 使用OpenSSL创建2048位pem rsa密钥和crt 从密钥和crt文件创建pfx文件 使用MMC将pfx导入到服务器上的个人证书存储中 将IIS配置为使用站点的证书 在客户端PC上 null 我还尝试将证书直接添加到Firefox的权限列表中。它

  • 问题:由于“无法联系服务器”,用户无法登录移动应用程序 调试消息:“类型错误: 网络请求失败” 尝试修复:重新启动服务器,验证数据库正在运行并且没有任何更改,重新启动服务器正在运行的VM,我使用postman检查了api。当我运行一个简单的POST请求时,收到以下消息: 连接到时出错https://app.something.com/api/Accounts/5076/sometest?filte