Travis 上的 SSL 证书失败,但在本地工作正常(使用 Requests 和 Certifi)
SSL Certificate Failure on Travis, but works fine locally (using Requests and Certifi)
我正在使用请求和证书抓取以下站点:https://ecf.ared.uscourts.gov/
当我在我的本地机器上抓取它时,它工作正常,但是当我 运行 在 Travis 中进行自动化测试时,它失败了:
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
我为此使用的代码非常简单:
url = 'https://ecf.ared.uscourts.gov/cgi-bin/login.pl'
r = requests.post(
url,
verify=certifi.where(),
timeout=60,
files={
'login': ('', username),
'key': ('', password)
},
)
知道 Travis 和我的本地计算机之间会导致证书失败的不同之处吗?我认为 certifi 的想法是将所有这些标准化。 (我已确认我在两台计算机上都更新了版本。)
知道了! Travis 使用不支持交叉签名证书的旧版本 OpenSSL,但我的本地开发机器使用现代版本的 OpenSSL。
此处的解决方案是使用 certifi.old_where()
,它提供较旧的、不太安全的证书支持。在我可以升级我们拥有的 OpenSSL 版本之前,我已经听天由命了。
我正在使用请求和证书抓取以下站点:https://ecf.ared.uscourts.gov/
当我在我的本地机器上抓取它时,它工作正常,但是当我 运行 在 Travis 中进行自动化测试时,它失败了:
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
我为此使用的代码非常简单:
url = 'https://ecf.ared.uscourts.gov/cgi-bin/login.pl'
r = requests.post(
url,
verify=certifi.where(),
timeout=60,
files={
'login': ('', username),
'key': ('', password)
},
)
知道 Travis 和我的本地计算机之间会导致证书失败的不同之处吗?我认为 certifi 的想法是将所有这些标准化。 (我已确认我在两台计算机上都更新了版本。)
知道了! Travis 使用不支持交叉签名证书的旧版本 OpenSSL,但我的本地开发机器使用现代版本的 OpenSSL。
此处的解决方案是使用 certifi.old_where()
,它提供较旧的、不太安全的证书支持。在我可以升级我们拥有的 OpenSSL 版本之前,我已经听天由命了。