徐中民 2025-05-18 00:05 采纳率: 98.7%
浏览 142
已采纳

为什么使用requests库时会遇到“certificate verify failed: self signed certificate in certificate chain”错误?

在使用Python的`requests`库进行HTTP请求时,如果遇到错误“certificate verify failed: self signed certificate in certificate chain”,通常是因为目标服务器使用了自签名SSL证书,而该证书未被`requests`库信任。`requests`默认会对HTTPS连接执行SSL验证,确保通信安全。然而,自签名证书未由受信任的证书颁发机构(CA)签发,导致验证失败。 此问题常见于开发或测试环境,其中服务器可能使用自签名证书以节省成本或简化配置。解决方法包括:1) 将自签名证书添加到系统的受信任CA存储中;2) 使用`requests`的`verify`参数指定自定义CA Bundle文件路径;3) 或暂时禁用SSL验证(不推荐用于生产环境,因存在安全隐患)。例如:`response = requests.get(url, verify=False)`。选择合适的解决方案取决于具体场景和安全性需求。
  • 写回答

1条回答 默认 最新

  • 祁圆圆 2025-05-18 00:06
    关注

    1. 问题概述

    在使用Python的requests库进行HTTP请求时,如果遇到错误“certificate verify failed: self signed certificate in certificate chain”,通常是因为目标服务器使用了自签名SSL证书。由于requests默认会对HTTPS连接执行SSL验证,而自签名证书未由受信任的证书颁发机构(CA)签发,因此验证失败。

    此问题常见于开发或测试环境,其中服务器可能出于成本考虑或简化配置使用自签名证书。

    2. 问题分析

    requests库通过SSL验证确保通信安全,避免中间人攻击等安全威胁。然而,当目标服务器使用自签名证书时,requests无法验证其真实性,从而抛出上述错误。

    以下是问题的核心原因:

    • 目标服务器使用自签名证书。
    • requests库默认依赖系统受信任的CA存储。
    • 自签名证书未被包含在系统CA存储中。

    解决该问题需要从证书管理和requests库配置两方面入手。

    3. 解决方案

    以下是三种常见的解决方案:

    1. 将自签名证书添加到系统的受信任CA存储中:通过操作系统或Python环境配置,将自签名证书导入到受信任的CA列表中。
    2. 使用verify参数指定自定义CA Bundle文件路径:为requests提供一个包含自签名证书的CA Bundle文件。
    3. 暂时禁用SSL验证:通过设置verify=False跳过SSL验证,但不推荐用于生产环境。

    以下是一个示例代码片段:

    
    import requests
    
    # 方法1:使用verify=False
    response = requests.get('https://example.com', verify=False)
    
    # 方法2:指定自定义CA Bundle
    response = requests.get('https://example.com', verify='/path/to/cabundle.pem')
        

    4. 方案对比

    以下是三种解决方案的对比表:

    方案优点缺点适用场景
    将自签名证书添加到系统CA存储一次性配置,全局生效需要管理员权限,可能影响其他应用长期使用的开发或测试环境
    指定自定义CA Bundle灵活性高,不影响其他应用需要维护额外的CA Bundle文件临时或独立运行的应用
    禁用SSL验证简单快捷存在安全隐患,不推荐用于生产环境快速调试或短期测试

    5. 流程图

    以下是解决问题的流程图:

    graph TD; A[出现"certificate verify failed"错误] --> B{是否可以修改系统CA存储?}; B --是--> C[将自签名证书添加到系统CA存储]; B --否--> D{是否可以提供自定义CA Bundle?}; D --是--> E[指定自定义CA Bundle路径]; D --否--> F[设置verify=False];
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 5月18日