Python 3.13是否有意忽略SSL_CERT_FILE环境变量?
Python 3.13中SSL_CERT_FILE环境变量不再被urllib默认读取的原因
这是有意的行为变更,并非意外情况。
背景与变更原因
在Python 3.12及更早版本中,urllib.request.urlopen()使用的默认SSL上下文会自动读取SSL_CERT_FILE环境变量,将其指定的证书作为信任根。但Python 3.13对SSL默认上下文的初始化逻辑做了调整:
- 为了强化默认安全配置的可控性,减少环境变量带来的隐式行为,官方移除了默认上下文自动加载
SSL_CERT_FILE的逻辑。 - 现在需要显式创建
SSLContext对象并配置验证证书位置,才能让自定义证书生效。
你的解决方案是正确的
你修改后的代码通过手动获取SSL_CERT_FILE环境变量值,创建SSLContext并调用load_verify_locations()加载证书,再将上下文传给urlopen(),这是Python 3.13及以后版本中使用自定义证书的标准方式。
内容的提问来源于stack exchange,提问作者M. Hearne
相关产品推荐
相关产品推荐

