如何找到SSL证书文件的路径?
我想用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 -> “管理证书”
- 见上文