news 2026/9/12 9:30:22

Hermes Agent 执行 hermes update 后 HTTPS 请求因 SSL CA 证书包损坏而失败怎么修复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hermes Agent 执行 hermes update 后 HTTPS 请求因 SSL CA 证书包损坏而失败怎么修复

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_BUNDLE
  • SSL_CERT_FILE
  • REQUESTS_CA_BUNDLE
  • CURL_CA_BUNDLE
  • 随 venv 安装的certifi包里的cacert.pem

当 venv 只被部分刷新、或上述某个变量指向一个已不存在的文件时,provider 客户端会在 Hermes 还没有足够上下文生成有用报错之前就构造失败。完整背景见 RCA 文档。

先确认故障形态:guard 会把坏变量和路径直接报出来

agent/ssl_guard.pyagent/agent_init.py创建 OpenAI 兼容 provider 客户端之前做预检,检查顺序是:

  1. 逐个检查显式 CA bundle 环境变量,报出具体坏掉的变量名和路径;
  2. 验证certifi可导入;
  3. 验证certifi.where()指向一个存在、大小合理的文件;
  4. 用每个受检 bundle 构建ssl.SSLContext,确认能加载出证书;
  5. 在上述任一步失败时抛出带修复提示的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_BUNDLESSL_CERT_FILEREQUESTS_CA_BUNDLECURL_CA_BUNDLE之一),而文件已丢失或被移动,重装 certifi 无效。此时按 RCA 文档的处理:把该环境变量改指向一个真实存在的 PEM bundle;如果 Hermes 应该直接用内置的certifi证书库,就把它 unset 掉。

改完环境变量后重新运行hermes doctor复核。

验证结果

hermes doctorSSL / 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 9:24:24

Tabby 在 ROCm 下提示 AMD 设备不受支持怎么解决?

Tabby 在 ROCm 下提示 AMD 设备不受支持怎么解决? 【免费下载链接】tabby Self-hosted AI coding assistant 项目地址: https://gitcode.com/GitHub_Trending/tab/tabby 在 Linux 上用 --device rocm 启动 Tabby 后,如果你的 AMD 显卡不在 ROCm 的…

作者头像 李华
网站建设 2026/9/12 9:23:05

RV1126B边缘AI监护摄像机:ISP-NPU-VPU全链路实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 9:22:53

Python+Vue3跨平台学习行为分析系统开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 9:21:48

微信小程序商城选型指南:原生开发与uni-app深度对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华