Windows:Python SSL 证书验证失败

新手上路,请多包涵

我已经安装了 Anaconda,但在尝试通过 Jupyter 笔记本进行 API 调用时遇到了 SSL 问题:

 import requests
import certifi

r = requests.get('https://github.com/')
print(r)

这首先产生了 SSL 连接错误。经过广泛搜索和我们 IT 部门的帮助,我可以解决这个问题。这里的解决方案是将公司根证书添加到 certifi 证书存储中。

不幸的是,现在对于其他请求,我仍然遇到同样的问题。使用 google2pandas 包调用 Google Analytics API 的示例代码:

 from google2pandas import *

query = {
    'reportRequests': [{
        'viewId' : 37616054,

        'dateRanges': [{
            'startDate' : '8daysAgo',
            'endDate'   : 'today'}],

        'dimensions' : [
            {'name' : 'ga:date'},
            {'name' : 'ga:pagePath'},
            {'name' : 'ga:browser'}],

        'metrics'   : [
            {'expression' : 'ga:pageviews'}],

        'dimensionFilterClauses' : [{
            'operator' : 'AND',
            'filters'  : [
                {'dimensionName' : 'ga:browser',
                 'operator' : 'REGEXP',
                 'expressions' : ['Firefox']},

                {'dimensionName' : 'ga:pagePath',
                 'operator' : 'REGEXP',
                 'expressions' : ['iPhone']}]
        }]
    }]
}

# Assume we have placed our client_secrets_v4.json file in the current
# working directory.

conn = GoogleAnalyticsQueryV4(secrets='Analytics.json')
df = conn.execute_query(query)

在这里,我仍然遇到之前在简单调用中遇到的 SSL 错误:

C:\套接字”) –> 850 self.do_handshake() 851 除了 (OSError, ValueError): 852 self.close()

C:\ProgramData\Anaconda3\lib\ssl.py 中的 do_handshake(self, block)

1106 如果超时 == 0.0 和块:1107

self.settimeout(无)-> 1108 self._sslobj.do_handshake()1109 最后:1110 self.settimeout(超时)

SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1045)

我相信还有另一个图书馆在使用,它不依赖于 certifi?但是我不知道在哪里以及如何添加我的根证书,所以所有 iPython 请求都可以工作。

任何想法表示赞赏。

原文由 Andii 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 704
1 个回答

我花了几天时间弄清楚如何解决这个问题。最后,我在请求库使用的配置文件中添加了我公司的 CA 证书。您可以通过以下方式检查此文件的路径:

 import requests as r
print(r.certs.where())

应打印 python 使用的 cacert.pem 的路径,编辑它并将 CA 证书附加到它的底部。

原文由 m33n 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题