You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI路由内调用aiohttp触发SSL证书验证失败问题问询

问题原因分析

该问题的核心根源是不同启动方式下,Python的ssl模块默认根证书查找路径存在差异,具体拆解如下:

  • 直接执行asyncio.run(google())或用代码内嵌uvicorn.run启动服务时,进程是由当前shell环境直接启动的,运行上下文完整,ssl.create_default_context()函数可以正常找到系统或Python自带的可信根证书存储,因此SSL验证可以正常通过。
  • 使用uvicorn命令行启动服务时,本质是调用uvicorn安装时自带的入口脚本,进程启动的上下文和直接运行Python脚本存在细微差异,部分环境下会导致默认根证书路径查找失败;如果加上--reload参数,问题会更明显:该模式下uvicorn会启动父子双进程,父进程负责监听文件变化,子进程负责实际运行FastAPI服务,fork出来的子进程继承的运行上下文存在异常,进一步导致ssl.create_default_context()没有加载到正确的根证书,发起HTTPS请求时就会触发证书验证失败的报错。
  • 手动指定certifi根证书的修复方案生效的原因是:certifi包自带了完整的Mozilla可信根证书集合,手动创建SSL上下文时强制指定该证书路径,直接绕开了默认的根证书路径查找逻辑,无论进程启动方式是什么,都能拿到正确的可信根证书,因此可以正常完成SSL验证。

你可以通过在代码中打印ssl.get_default_verify_paths()的输出,对比不同启动方式下默认根证书路径的差异验证上述结论。

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:15:03