我正在使用请求连接到REST API,并且我有一个证书包以及一个.pem密钥,我正在使用该API来验证我是谁。我的证书和代码在我的Ubuntu机器上工作,所以我知道证书是好的。
不久前,当我在Linux上设置这个时,我遇到了这个类似的问题,当我把这些证书放在etc/pki/tls/certs中时,抛出了异常。当我将这些证书转移到etc/ssl/certs时,一切都运行得很好。
需要说明的是,我已经用这些证书对目录进行了散列,尽管老实说我不确定散列的重要性。
所以我的问题是我应该把这些证书放在Windows上的什么地方?
下面是一段代码:
import requests
private_key = '\path\to\private\key.pem'
cert_bundle = '\path\to\bundle'
url = 'https://www.securedsite.com/api-entry'
session = requests.Session()
session.cert = private_key
session.verify = cert_bundle
try:
resp = session.post(url)
except:
# Exception
在Windows上,我目前拥有证书的位置:
'C:\stuff\admin\private\core_admin.pem'
'C:\stuff\admin\certs'
软件版本:
- Windows 10
- 简体中文
- 请求2.18.4
- openssl 1.0.2l
作为参考,linux机器是:
- Ubuntu 16.04.1 4.13.0-39-通用
- 简体中文
- 请求2.18.4
- openssl 1.0.2l
在代码中,我使用pathlibs Path来构建路径,这样我就可以在linux和windows之间来回切换,一切都可以在linux上工作。我想我只需要指导我的证书放在哪里。
2条答案
按热度按时间vulvrdjw1#
在Windows上,您通常会将它们导入证书管理器(“开始”,然后“管理计算机证书”或“管理用户证书”,这取决于您的范围)。这将使他们在适当的位置。Python使用此证书存储。
但是,requests默认使用它自己的,但是您可以绕过它。请参阅SSL failure on Windows using python requests了解如何从那里继续的详细信息。
小心,这是一个很深的兔子洞。请参阅https://github.com/psf/requests/issues/2966了解更多相关背景。
9rnv2umw2#
默认情况下,Windows中的Python请求库不使用默认的Windows证书存储,而是使用https://pypi.org/project/certifi/提供的PEM文件。
要添加新的CA根证书,请执行以下操作之一:
python -c "import certifi ; print(certifi.where())"
,将您的CA根证书添加到该文件。