python - 如何使用指定的 ca 文件通过 ssl 执行 get 请求
问题描述
作为一项实验,我正在尝试使用指定的 ca 文件向https://google.com发出 GET 请求。
通过以下 openssl 命令检索 Google 的证书:
openssl s_client -showcerts -connect google.com:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem
使用此证书,我使用以下代码发出 GET 请求:
cafile = "mycertfile.pem"
r = requests.get("https://google.com", verify=cafile)
print(r.status_code)
为什么这不起作用并导致 SSL 证书验证失败?
Traceback (most recent call last):
File "C:/Users/jarno/Projects/pyplayground/main.py", line 6, in <module>
r = requests.get("https://google.com", verify=cafile)
File "C:\Users\jarno\Projects\flasktest\venv\lib\site-packages\requests\api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "C:\Users\jarno\Projects\flasktest\venv\lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\jarno\Projects\flasktest\venv\lib\site-packages\requests\sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\jarno\Projects\flasktest\venv\lib\site-packages\requests\sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "C:\Users\jarno\Projects\flasktest\venv\lib\site-packages\requests\adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)')))
解决方案
推荐阅读
- python - 有没有办法以更简洁和正确的方式编写此代码?
- templates - NGINX 关闭或重新加载时如何加载 HTML 模板?
- jakarta-ee - JEE:不同的间隔定时器
- emeditor - 用 nexline 正则表达式替换时,emeditor 没有响应 \n
- python - 将数据帧动态分配给 for 语句中的对象
- list - haskell 函数的时间复杂度
- awk - 我的 awk 脚本不打印 0 和 NR 为 0
- c# - 如何执行sql查询以匹配包含单引号(')的列值
- sharepoint-online - 如何使用 JS 或 JQuery 清除缓存
- javascript - 如何在 muidatatables 中添加图像?