0

我正在使用请求和证书抓取以下网站: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 的想法是标准化所有这些。(我已经确认我在两台计算机上都更新了版本。)

4

1 回答 1

0

知道了!Travis 使用不支持交叉签名证书的旧版本 OpenSSL,但我的本地开发机器使用的是现代版本的 OpenSSL。

这里的解决方案是使用certifi.old_where()它提供较旧的、不太安全的证书支持。我已经接受了这个,直到我可以升级我们拥有的 OpenSSL 版本。

于 2016-12-23T01:24:38.177 回答