Hermes Agent 执行 hermes update 后 HTTPS 请求因 SSL CA 证书包损坏而失败怎么修复
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
如果你执行hermes update后(更新中断、venv 修复被中断,或某个指向 CA 证书包的环境变量已过期),Hermes Agent 发起的第一次出站 HTTPS 请求失败,报错是裸的FileNotFoundError: [Errno 2] No such file or directory或一条没有指出具体坏掉 CA 路径的低级 SSL 错误,本文给出仓库文档中记录的诊断与修复路径。
Hermes 的 provider 调用、模型元数据、gateway 投递和 web 工具都走 OpenAI/httpx 或 requests 客户端,这些客户端的 CA 证书包配置来自以下来源(见 agent/ssl_guard.py):
HERMES_CA_BUNDLESSL_CERT_FILEREQUESTS_CA_BUNDLECURL_CA_BUNDLE- 随 venv 安装的
certifi包里的cacert.pem
当 venv 只被部分刷新、或上述某个变量指向一个已不存在的文件时,provider 客户端会在 Hermes 还没有足够上下文生成有用报错之前就构造失败。完整背景见 RCA 文档。
先确认故障形态:guard 会把坏变量和路径直接报出来
agent/ssl_guard.py在agent/agent_init.py创建 OpenAI 兼容 provider 客户端之前做预检,检查顺序是:
- 逐个检查显式 CA bundle 环境变量,报出具体坏掉的变量名和路径;
- 验证
certifi可导入; - 验证
certifi.where()指向一个存在、大小合理的文件; - 用每个受检 bundle 构建
ssl.SSLContext,确认能加载出证书; - 在上述任一步失败时抛出带修复提示的
SSLConfigurationError,而不是让 httpx/OpenAI 抛出裸的低级错误。
guard 触发时你会看到类似下面的消息(RCA 文档给出的文档示例,路径按你的实际环境不同):
Failed to initialize OpenAI client: SSL_CERT_FILE points to a missing CA bundle: C:\path\to\missing\cacert.pem Repair: python -m pip install --force-reinstall certifi openai httpx If you configured a custom corporate CA bundle, fix or unset the broken CA bundle environment variable.注意第一行已经指明了是哪个环境变量、指向哪个路径。这一行是后续选择修复方式的依据:如果报的是certifi本身的 bundle,走依赖重装;如果报的是你自定义的变量,走环境变量修复。
用 hermes doctor 在不启动模型会话的情况下诊断
hermes doctor把同一套检查暴露在一个名为SSL / CA Certificates的诊断项下(hermes_cli/doctor.py),不需要启动模型会话就能复现问题。运行:
hermes doctor该检查项在 hermes_cli/doctor_platform.py 的check_certificates中实现,行为如下:
- 检查通过时输出
SSL CA certificate bundle is valid; - 检查失败时输出
SSL CA certificate bundle is broken并附上第一条具体错误; - 如果
SSLConfigurationError不可用(比如环境里连agent.errors都导入不了),则以SSL certificate check skipped告警跳过。
修复:按故障来源走对应路径
路径一:venv 里的 certifi 损坏(常规情况)
如果坏掉的是certifi自带的cacert.pem,RCA 文档给出的修复命令是强制重装受影响的客户端依赖:
python -m pip install --force-reinstall certifi openai httpx替代路径:hermes doctor --fix会自动执行 certifi 重装。ssl_guard.py的修复提示和check_certificates都指向这条命令,它实际运行的是{sys.executable} -m pip install --force-reinstall certifi,即只重装 certifi。注意--fix会实际执行 pip 安装,改动的是当前解释器的环境,请在 Hermes 自己的 venv 里运行。
--fix执行后会清除内存中缓存的 certifi 模块再复核,修复成功输出SSL CA certificate bundle repaired (certifi reinstalled);如果重装后仍然报SSL CA certificate bundle still broken after reinstall,文档给出的下一步是检查是否有自定义 CA 环境变量(SSL_CERT_FILE/REQUESTS_CA_BUNDLE)指向缺失文件,或者重建 venv。
路径二:自定义/企业 CA 环境变量指向了缺失文件
如果你配置了自定义企业 CA bundle(HERMES_CA_BUNDLE、SSL_CERT_FILE、REQUESTS_CA_BUNDLE或CURL_CA_BUNDLE之一),而文件已丢失或被移动,重装 certifi 无效。此时按 RCA 文档的处理:把该环境变量改指向一个真实存在的 PEM bundle;如果 Hermes 应该直接用内置的certifi证书库,就把它 unset 掉。
改完环境变量后重新运行hermes doctor复核。
验证结果
以hermes doctor的SSL / CA Certificates项作为验证手段:
- 诊断通过:
SSL CA certificate bundle is valid; - 通过
--fix修复后:SSL CA certificate bundle repaired (certifi reinstalled)。
拿到这两种输出后,再实际发起一次会走 HTTPS 的操作(如启动一次模型会话),确认不再出现裸FileNotFoundError或低级 SSL 报错。
边界与限制
- 如果检查本身无法运行(
SSLConfigurationError不可导入),doctor 只输出SSL certificate check skipped并跳过,这时说明环境问题比 CA bundle 更深,需要按该告警附带的原始异常处理。 - 仓库提供了逃生开关:设置
HERMES_SKIP_SSL_GUARD=1可跳过预检。RCA 文档明确限定它只用于沙箱或受管信任环境——即 Python 的 CA 路径看起来异常、但下游客户端确定能工作的场景。不要在普通环境用它掩盖真实问题。 - 预检在
agent_init.py创建 provider 客户端之前执行,意味着修复后无需额外操作即可让后续 provider 调用恢复正常;未修复时,所有依赖这些客户端的功能(provider 调用、模型元数据、gateway 投递、web 工具)都会受影响。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考