我想使用 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 获取此信息吗?还是我错过了更基本的东西?
最佳答案
cert
参数用于客户端身份验证。如果你想向服务器证明你的身份。如果这是问题所在,您会在服务器上收到错误。
您需要的是服务器端身份验证。服务器必须证明它的身份。 由于您连接到内部服务器请求在其提供的 bundle 中没有此服务器证书,因此无法确认服务器身份。 您必须使用内部 CA bundle 提供请求。 为此,您必须先从浏览器中提取它。
来自文档:
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
- 选择“权威”标签
- 找到您的内部 CA 并单击
export
- 最好的格式是“Base64编码的证书链”
- 保存到您可以再次找到它的位置
- 现在你可以使用 `request.get(url, verify=)
您还可以通过以下方式访问证书管理器:
(chrome 的步骤,其他浏览器非常相似)
- 转到设置
- 点击底部的“显示高级设置”
- HTTPS/SSL -> “管理证书”
- 见上文
关于python - 如何找到 SSL 证书文件的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746857/