根本原因是代理劫持TLS流量并重签证书,而Hermes默认严格校验证书;需通过导入代理根证书、禁用SSL校验(仅调试)、配置no_proxy排除关键API或指定CA证书路径四种方式解决。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当Hermes Agent在调用外部API时被代理软件(如Clash、Surge、Proxyman、Fiddler或企业级透明代理)拦截导致连接频繁断开、TLS握手失败、HTTP 302跳转异常或请求静默丢弃,根本原因在于代理强制劫持SSL/TLS流量并重签证书,而Hermes默认启用严格证书校验且未适配中间人代理的根证书信任链。
确认代理是否正在劫持HTTPS流量
执行curl -vI https://api.openai.com 2>&1 | grep "SSL certificate verify ok",若输出为空且日志中出现"unable to get local issuer certificate"或"self signed certificate in certificate chain",说明代理已注入自签名CA证书,但系统或Python未信任该证书。
运行openssl s_client -connect api.openai.com:443 -showcerts 2>/dev/null | head -20,观察返回证书链首行是否包含"CN=Clash for Windows CA"、"CN=Surge Proxy Root Authority"等非权威CA标识。
【关键判断】若证书链中出现非Let's Encrypt/ISRG/DigiCert等公开CA机构签名,且本地未导入对应根证书,则所有HTTPS请求必然被代理拒绝或降级为HTTP明文,导致Agent连接中断。
方法一:将代理根证书导入系统信任库(推荐长期方案)
第一步:从代理软件导出根证书。Clash for Windows → 设置 → 全局设置 → 点击“导出CA证书”;Surge → 配置 → 证书 → 导出Root CA;Fiddler → Tools → Options → HTTPS → Actions → Export Root Certificate to Desktop。
第二步:将导出的.crt文件复制到Linux/macOS系统信任目录:
macOS:sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./Clash-CA.crt
Ubuntu/Debian:sudo cp ./Clash-CA.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
第三步:验证证书是否生效:python3 -c "import ssl; print(ssl.create_default_context().get_ca_certs())" 应返回包含该证书的列表;同时重启Hermes Agent进程使Python SSL上下文重载。
方法二:临时禁用证书校验(仅限开发/内网调试)
方法一:修改Hermes Agent启动入口,在main.py或hermes start调用的初始化模块顶部插入两行:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
方法二:在environments/default.yaml中为各HTTP客户端显式关闭验证:
http_client:
verify_ssl: false
trust_env: false
【高危操作】此方式会完全绕过TLS证书校验,暴露于中间人攻击风险,禁止在生产环境或处理敏感数据时使用。
方法三:配置代理排除规则,让Agent直连关键API
定位~/.hermes/config.yaml,找到network.proxy区块,添加no_proxy字段:
proxy:
http: http://127.0.0.1:7890
https: http://127.0.0.1:7890
no_proxy: "api.openai.com,openrouter.ai,generativelanguage.googleapis.com,galaxyship.kindee.com"
确保no_proxy值为纯域名列表,不带协议、端口与路径,多个域名用英文逗号分隔;若使用Docker部署,还需在容器启动时通过--env NO_PROXY="..."透传该变量。
重启Agent后,执行hermes-cli test http --url https://api.openai.com/v1/models,观察响应时间是否恢复正常且无SSL错误堆栈。
方法四:强制指定可信CA证书路径(精准可控)
第一步:将代理根证书(如Clash-CA.crt)放入~/.hermes/certs/目录下。
第二步:在config.yaml中配置:
http_client:
ca_bundle: "~/.hermes/certs/Clash-CA.crt"
第三步:确保tools/http_client.py中所有httpx.AsyncClient初始化均传入verify参数:
client = httpx.AsyncClient(verify=os.path.expanduser(config.get("ca_bundle", "")))
该方式无需系统级证书导入,不干扰其他应用,且可为不同环境指定不同CA包,适合多代理切换场景。


















