在使用 Python 的 Requests 库发起 HTTPS 请求时,证书验证的正确处理方式是什么?请说明不同情况下的处理策略。
考察说明
考查对 Requests 库 HTTPS 证书验证机制的理解及不同场景下的处理能力。
回答思路
- 【回答框架 1】Requests 默认启用证书验证,通过 verify 参数控制。verify=True 时使用 CA 证书验证服务端证书,失败则抛 SSLError。
- 【回答框架 2】verify 可设为 False 跳过验证,但会带来中间人攻击风险,仅建议在测试或信任环境下使用,并配合 urllib3 的禁用警告。
- 【回答框架 3】可将 verify 设为 CA 证书文件路径或目录,用于自签名证书或私有 CA 场景。
- 【回答框架 4】客户端证书通过 cert 参数指定,格式为包含 cert 和 key 的文件路径元组。
- 【回答框架 5】生产环境应始终启用验证,并维护可信 CA 列表,避免因证书问题导致安全漏洞。
- 【关键点 1】verify 参数控制证书验证,默认 True。
- 【关键点 2】verify=False 跳过验证,但存在安全风险。
- 【关键点 3】自签名证书可通过指定 CA 文件或目录实现验证。
- 【关键点 4】客户端证书使用 cert 参数提供。
- 【关键点 5】生产环境必须开启验证。
- 【易错点 1】直接设置 verify=False 可能导致中间人攻击。
- 【易错点 2】忽略证书警告可能掩盖真实的安全问题。
- 【易错点 3】错误地将客户端证书与 CA 验证混淆。