我正在使用请求和证书抓取以下站点: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)
},
)有什么想法,特拉维斯和我的本地机器之间有什么不同,会导致证书失败吗?我以为证书的意思是标准化所有这些。(我已经证实,我已经在两台计算机上更新了版本。)
发布于 2016-12-23 01:24:38
明白了!Travis使用的是一个旧版本的OpenSSL,它不支持交叉签名的证书,但是我的本地开发机器使用的是现代版本的OpenSSL。
这里的解决方案是使用certifi.old_where(),它提供了较旧的、安全性较低的证书支持。我已经接受了这一点,直到我能够升级我们已经拥有的OpenSSL版本。
https://stackoverflow.com/questions/41292493
复制相似问题