Python 3.12 SSL验证报错,3.9正常运行,求版本差异原因
Python 3.9与3.12及对应依赖库的SSL验证机制差异
一、Python标准库_ssl模块的核心变化
- Python 3.10及后续版本(包括3.12)的
_ssl模块默认启用了更严格的证书有效期校验逻辑,会严格检查证书的过期时间,一旦证书过期直接触发SSLCertVerificationError。而Python 3.9的_ssl模块对部分过期证书存在宽松兼容,可能跳过了严格的有效期校验步骤。 - 你遇到的
_ssl.c:1000错误就是3.12标准库层面严格校验触发的结果,3.9版本的旧版_ssl没有执行这么强的校验。
二、Requests库(2.23.0 vs 2.31.0)的验证策略调整
- Requests 2.30+版本收紧了默认SSL验证规则,完全遵循底层SSL库的校验结果,不再自行忽略证书过期这类错误。而2.23.0版本依赖的urllib3版本较低,旧版urllib3对证书验证的严格度不足,甚至可能存在绕过部分校验的逻辑,导致过期证书能通过验证。
三、pyOpenSSL(20.0.1 vs 24.1)的底层依赖与验证逻辑升级
- pyOpenSSL 24.1依赖的OpenSSL版本通常为1.1.1+或3.x,这些新版本的OpenSSL对证书链完整性、有效期检查、证书吊销列表(CRL)校验都更严格,完全遵循现代SSL/TLS安全标准。而20.0.1依赖的旧版OpenSSL验证逻辑宽松,允许部分过期证书通过校验。
- 新版pyOpenSSL不再兼容过时的证书格式或非标准的过期证书处理方式,严格执行RFC规定的验证流程。
四、pyasn1(0.4.8 vs 0.6.0)的证书解析严格度提升
- pyasn1负责解析证书的ASN.1格式数据,0.6.0版本对证书字段(包括有效期)的解析完全遵循标准,不存在解析偏差。而旧版0.4.8对部分异常格式的证书存在容错处理,可能导致有效期字段解析错误,让验证逻辑误判过期证书为有效。
内容的提问来源于stack exchange,提问作者yash
相关产品推荐
相关产品推荐

