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

时间:2018-06-07 14:32:46

标签: python windows ssl python-requests ssl-certificate

我正在使用连接到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:\东西\管理员\私人\ core_admin.pem'

     

' C:\东西\管理员\证书\'

软件版本:

  • Windows 10
  • Python 3.6.3
  • 要求2.18.4
  • openssl 1.0.2l

供参考,linux机器是:

  • Ubuntu 16.04.1 4.13.0-39-generic
  • Python 3.6.3
  • 要求2.18.4
  • openssl 1.0.2l

在代码中,我使用pathlibs Path来构建路径,以便我可以在linux和windows之间来回切换,一切都可以在linux上运行。我想我只需要在哪里放置我的证书。

1 个答案:

答案 0 :(得分:0)

在Windows上,通常将它们导入到证书管理器中(“开始”,然后“管理计算机证书”或“管理用户证书”,具体取决于您的范围)。这样可以将它们放到适当的位置。 Python使用此证书存储。

但是,请求默认使用它自己的,但是您可以解决它。有关如何从那里继续的详细信息,请参见SSL failure on Windows using python requests

当心,这是一个深深的兔子洞。有关更多背景信息,请参见https://github.com/kennethreitz/requests/issues/2966