Python 请求在特定 HTTPS 站点上失败,尽管其证书有效
Python Requests fails on a specific HTTPS site, although its certificate is valid
我们正在使用一个 Python 包,它在内部使用 requests
来访问在线服务。该服务位于 https://dsbox02.isi.edu:8888/ 。如果您使用浏览器点击 link,您会看到该页面打开,并且它有一个有效的证书。
但是,以下 Python 代码失败了:
import requests
requests.get('https://dsbox02.isi.edu:8888')
requests.exceptions.SSLError: HTTPSConnectionPool(host='dsbox02.isi.edu', port=8888): 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:1122)')))
这发生在 Windows 10 和 Python 3.7、Ubuntu 18.04 和 Python 3.6 以及 python:latest
docker 图像上,其中Python 3.9。在 Mac 和 Python 3.8 上它确实有效。
有些 ssl 证书不受所有网络浏览器的信任。您可能需要将 Intermediate/chain 证书安装到 link 受信任的根证书。
最简单的方法是使用 ssl 检查器检查您的网站。如:https://www.sslshopper.com/ssl-checker.html#hostname=https://dsbox02.isi.edu:8888/
我们正在使用一个 Python 包,它在内部使用 requests
来访问在线服务。该服务位于 https://dsbox02.isi.edu:8888/ 。如果您使用浏览器点击 link,您会看到该页面打开,并且它有一个有效的证书。
但是,以下 Python 代码失败了:
import requests
requests.get('https://dsbox02.isi.edu:8888')
requests.exceptions.SSLError: HTTPSConnectionPool(host='dsbox02.isi.edu', port=8888): 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:1122)')))
这发生在 Windows 10 和 Python 3.7、Ubuntu 18.04 和 Python 3.6 以及 python:latest
docker 图像上,其中Python 3.9。在 Mac 和 Python 3.8 上它确实有效。
有些 ssl 证书不受所有网络浏览器的信任。您可能需要将 Intermediate/chain 证书安装到 link 受信任的根证书。
最简单的方法是使用 ssl 检查器检查您的网站。如:https://www.sslshopper.com/ssl-checker.html#hostname=https://dsbox02.isi.edu:8888/