Python: CERTIFICATE_VERIFY_FAILED
使用python的urllib的urlopen一个https的api时,经常遇到这个错误。解决方案:
首先检查web server端配置的证书是否正确。使用nginx + Let’s Encrypt的证书时,certificate文件需要用fullchain的那个:
1 | server { |
如果这一步配置是正确的,但是仍然抛以上CERTIFICATE_VERIFY_FAILED异常,如果不想在python端手动指定证书文件,可以考虑忽略SSL证书验证:
方法1)在发送请求前,运行:
1 | import ssl |
方法2)使用certifi包:
1 | pip install certifi |
代码:
1 | import certifi |
方法3)设置环境变量告诉python不要验证ssl证书:
1 | export PYTHONHTTPSVERIFY=0 && python send_req.py |
方法4)使用requests包:
1 | pip install requests |
代码:
1 | import requests |