15

我想使用 Python 请求来获取公司内部网页的内容(例如https://internal.com)。我可以在浏览器中看到这个页面,并且可以“查看证书”。

所以现在我想获取带有请求的网页,所以我这样做:

import requests
requests.get('https://internal.com')

但后来我得到一个 SSLError:

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

所以我想我需要指定一个证书文件:

requests.get('https://example.com', cert=('/path/server.crt', '/path/key'))

但是如何找到证书文件的路径?查看网页时,我可以从 Chrome 或 IE 获取此信息吗?还是我错过了一些更基本的东西?

4

2 回答 2

11

cert参数用于客户端身份验证。如果你想向服务器证明你的身份。如果这是问题所在,您将在服务器上收到错误消息。

您需要的是服务器端身份验证。服务器必须证明它的身份。由于您正在连接到内部服务器请求,因此提供的捆绑包中没有此服务器证书,因此无法确认服务器身份。您必须使用内部 CA 捆绑提供请求。为此,您必须先从浏览器中提取它。

从文档:

You can also pass "verify" the path to a "CA_BUNDLE" file for private certs.
You can also set the "REQUESTS_CA_BUNDLE" environment variable.

铬(短版):

  • 把它放在你的网址栏中chrome://settings/certificates
  • 选择选项卡“当局”
  • 找到您的内部 CA 并单击export
  • 最佳格式是“Base64 编码证书链”
  • 保存到您将再次找到它的位置
  • 现在你可以使用`request.get(url, verify=)

您还可以通过以下方式访问证书管理器:

(chrome的步骤,其他浏览器非常相似)

  • 前往设置
  • 点击底部的“显示高级设置”
  • HTTPS/SSL -> “管理证书”
  • 看上面
于 2013-02-08T15:38:19.033 回答
0

确保在导出 crt 时,在文件类型中选择另存为下拉菜单“带链导出” - 这样它将所有三个证书合二为一。那是我的问题。

于 2019-11-20T15:51:20.430 回答