ssl Python请求证书验证在Windows上失败

ws51t4hk  于 2023-05-29  发布在  Python
关注(0)|答案(2)|浏览(179)

我正在使用请求连接到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上工作。我想我只需要指导我的证书放在哪里。

vulvrdjw

vulvrdjw1#

在Windows上,您通常会将它们导入证书管理器(“开始”,然后“管理计算机证书”或“管理用户证书”,这取决于您的范围)。这将使他们在适当的位置。Python使用此证书存储。
但是,requests默认使用它自己的,但是您可以绕过它。请参阅SSL failure on Windows using python requests了解如何从那里继续的详细信息。
小心,这是一个很深的兔子洞。请参阅https://github.com/psf/requests/issues/2966了解更多相关背景。

9rnv2umw

9rnv2umw2#

默认情况下,Windows中的Python请求库不使用默认的Windows证书存储,而是使用https://pypi.org/project/certifi/提供的PEM文件。
要添加新的CA根证书,请执行以下操作之一:

  • 找出您的PEM文件存储在哪里:python -c "import certifi ; print(certifi.where())",将您的CA根证书添加到该文件。
  • 安装https://pypi.org/project/python-certifi-win32/,这将使证书能够使用Windows证书存储。在那里安装CA根证书。

相关问题