如何修复 Python Requests 中的 SSL 错误(SSL 错误 证书验证失败)
回答
Python 请求中的 SSLError 通常发生在 HTTPS 连接期间 SSL 证书验证失败时。这通常是由于证书不可信、过期或配置错误导致的。可以通过更新 CA 证书、配置受信任的证书路径或在非生产环境中临时禁用验证来解决此问题。
详细说明
Python 的 requests 库默认强制执行 SSL/TLS 验证,以确保客户端和服务器之间的安全通信。当网站的证书无法通过受信任的证书颁发机构(CA)验证时,Python 会抛出 SSLError,例如 CERTIFICATE_VERIFY_FAILED。这通常由自签名证书、缺少中间证书链、过时的根 CA 套件或启用了 SSL 检查代理的环境触发。
另一个常见原因是 certifi 包使用的过时系统 CA 存储库,该库维护受信任的根证书。如果此证书包过时或被系统/网络配置覆盖,合法的 HTTPS 端点可能会验证失败。在自动化或爬虫环境中,通过代理或受保护 API 连接时,此问题经常出现。
解决方案/方法
- 更新 CA 证书和 certifi 包:确保系统和 Python 环境拥有最新的受信任根证书。更新
certifi或系统 CA 套件通常可以解决因过时的信任存储导致的验证失败问题。 - 提供自定义证书链:如果使用私有或自签名证书连接到服务器,可以使用
verify参数显式传递证书路径。这可确保 Python 信任正确的 CA,而无需全局禁用安全验证。 - 禁用 SSL 验证(仅限临时调试):设置
verify=False会完全跳过证书验证。虽然这可以快速解决连接失败问题,但存在安全隐患,仅应在受控的开发环境中使用。在大规模爬虫或自动化场景中,可通过托管代理层或使用 CapSolver 等辅助工具的自动化验证解决方案,确保在处理受保护的 HTTPS 端点时保持可靠性。
最佳实践/技巧
在生产系统中避免禁用 SSL 验证,因为这会使请求暴露于中间人攻击中。相反,应保持 CA 证书包的更新,验证服务器证书链,并检查网络中间件(如企业代理或杀毒软件的 SSL 检查工具)。对于与受保护网站交互的自动化流水线,确保各环境中的 TLS 配置一致,以减少间歇性 SSL 握手失败的问题。
👉 相关:
在 CapSolver 注册时使用代码
FAQ,可额外获得 5% 的充值奖励。
CapSolver 常见问题 — capsolver.com
