如何找到SSL证书文件的路径?

15 投票
2 回答
63546 浏览
提问于 2025-04-17 15:04

我想用Python的Requests库来获取公司内部网页的内容,比如说https://internal.com。我在浏览器里能看到这个页面,而且可以“查看证书”。

所以现在我想用Requests来获取这个网页,我这样做:

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浏览网页时获取这个信息吗?还是说我遗漏了什么更基本的东西?

2 个回答

0

确保在导出crt文件时,在文件类型的下拉菜单中选择“带链导出”。这样导出的文件就会把三个证书都放在一起。这就是我遇到的问题。

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(简短版):

  • 在地址栏输入 chrome://settings/certificates
  • 选择“Authorities”标签
  • 找到你的内部CA,然后点击 export
  • 最佳格式是“Base64编码的证书链”
  • 保存到一个你能找到的地方
  • 现在你可以使用 `request.get(url, verify=)`

你也可以通过以下方式访问证书管理器:

(Chrome的步骤,其他浏览器类似)

  • 进入设置
  • 点击底部的“显示高级设置”
  • HTTPS/SSL -> “管理证书”
  • 见上文

撰写回答