对于Python开发者而言,SSL证书验证是保障网络通信安全的核心环节,而Certifi正是这一环节中被广泛依赖的开源工具。作为一款开源的Python SSL证书库,Certifi的核心作用是提供Mozilla精心筛选的CA(证书颁发机构)证书集合,解决Python跨平台SSL验证混乱的问题,为requests等主流库提供稳定的证书支持,每月下载量超7000万次,是Python生态中隐形的安全基石。
简单来说,Certifi的存在让Python开发者无需手动配置系统证书,就能轻松实现HTTPS连接的安全验证——无论是抓取网页数据、访问云服务API,还是开发支付系统、用户认证服务等敏感应用,Certifi都能确保数据传输的加密安全与身份可信,避免开发者因证书配置繁琐而禁用SSL验证,从源头降低安全风险。其用法也十分简洁,仅需一行代码即可获取证书路径,集成到各类网络请求中。
import certifi
# 获取CA证书bundle路径
cert_path = certifi.where()
# 结合requests使用(requests会自动调用Certifi)
import requests
response = requests.get("https://example.com", verify=cert_path)
重点预警:Certifi 历史版本存在数据伪造漏洞
近日,我们注意到Certifi的多个历史版本存在严重安全漏洞,该漏洞已被分配CVE编号CVE-2022-23491,GHSA编号GHSA-43fp-rhv2-5gv8,影响范围覆盖2017年11月5日至2022年12月7日之间发布的所有版本(即 ≥2017.11.05 且 <2022.12.07 版本)。
该漏洞的核心问题是数据伪造:Certifi在处理根证书存储数据时,未充分验证数据的来源和真实性,导致攻击者可通过构造恶意数据,绕过验证机制,从根存储中删除“TrustCor”相关的根证书。可能有开发者会疑惑,删除一个根证书会有什么影响?这里需要明确根证书的核心作用——根证书是数字证书信任链的顶端,由权威CA自签发,是整个网络信任体系的基石,负责验证下级证书的合法性,保障HTTPS连接、数字签名验证等功能的正常运行。
TrustCor作为曾被Mozilla信任的CA机构,其根证书被Certifi纳入根存储,用于验证依赖该CA签发的SSL证书。攻击者删除TrustCor根证书后,会直接导致依赖该根证书的HTTPS连接验证失败,可能引发一系列安全风险:例如,合法网站因证书验证失败被浏览器或应用拦截,影响业务正常运行;更严重的是,攻击者可能利用证书验证失效的漏洞,实施中间人攻击、证书伪造等恶意行为,窃取传输中的敏感数据。
值得注意的是,TrustCor根证书被删除并非偶然——该漏洞被发现的背景是,媒体曝光TrustCor的所有权方同时运营着一家生产间谍软件的企业,Mozilla随后启动调查,并逐步将其根证书从信任存储中移除,而Certifi的2022.12.07版本也同步完成了这一操作,同时修复了该数据伪造漏洞。
紧急修复建议:立即升级至安全版本
针对该漏洞,Certifi官方已在2022年12月7日发布的2022.12.07版本中完成修复,不仅移除了TrustCor根证书,还强化了数据验证逻辑,杜绝了数据伪造导致根证书被删除的可能。在此,强烈建议所有使用Certifi的开发者和企业立即采取以下措施:
- 检查当前项目中Certifi的版本,通过
pip show certifi命令查看版本号,若处于2017.11.05至2022.12.07之间,立即升级至2022.12.07及以上版本(推荐升级至最新稳定版,如2024.07.04版本,可进一步规避其他潜在安全风险)。 - 升级命令:
pip install --upgrade certifi,升级后重启相关应用,确保新的证书配置生效。 - 排查项目依赖,确认requests等依赖Certifi的库是否已同步适配最新版本的Certifi,避免出现依赖冲突。
- 定期关注Certifi官方安全公告,及时响应后续版本更新,养成定期更新依赖库的习惯,从源头防范安全漏洞。
总结
Certifi作为Python生态中不可或缺的SSL证书工具,其安全性直接关系到无数Python应用的网络通信安全。此次数据伪造漏洞提醒我们,即使是基础的开源工具,也可能存在潜在安全风险,尤其是涉及证书验证、数据加密等核心安全环节的组件,更需重视版本管理和漏洞防护。
对于开发者而言,定期检查依赖库版本、及时修复已知漏洞,是保障项目安全的基本要求;对于企业而言,建立完善的依赖管理机制,定期进行安全扫描,才能有效规避因第三方组件漏洞引发的安全事故。
如果你的项目正使用Certifi的历史版本,建议立即执行升级操作;若在升级过程中遇到依赖冲突、配置异常等问题,欢迎在评论区留言交流,共同守护Python应用的安全防线。