SSL Certificate Failure on Travis, but works fine locally (using Requests and Certifi)

巧了我就是萌 提交于 2020-01-06 19:52:55

问题


I am scraping the following site using requests and certifi: https://ecf.ared.uscourts.gov/

When I scrape it on my local machine, it works fine, but when I run automated tests in Travis, it fails with:

SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

The code I'm using for this is pretty straightforward:

url = 'https://ecf.ared.uscourts.gov/cgi-bin/login.pl'
r = requests.post(
    url,
    verify=certifi.where(),
    timeout=60,
    files={
        'login': ('', username),
        'key': ('', password)
    },
)

Any ideas what's different between Travis and my local machine that would cause a certificate failure? I thought the idea of certifi was to standardize all this. (I've verified I have updated versions on both computers.)


回答1:


Got it! Travis uses an old version of OpenSSL which doesn't support cross-signed certificates, but my local dev machine uses a modern version of OpenSSL.

The solution here is to use certifi.old_where() which provides older, less secure certificate support. I've resigned myself to this until I can upgrade the version of OpenSSL that we have.



来源:https://stackoverflow.com/questions/41292493/ssl-certificate-failure-on-travis-but-works-fine-locally-using-requests-and-ce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!