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

调试Caddy中curl出现SSL错误14094438的问题

排查方向整理
  • 核对Caddy站点配置
    确认你的Caddyfile中,service.internal.example.com的站点配置是否覆盖了localhost的监听场景。如果Caddy仅针对该域名配置了HTTPS站点,但未将localhost作为别名加入,当你用localhost加Host头请求时,Caddy可能匹配到默认的localhost站点(或未匹配到对应站点),返回的证书与请求的Host不匹配,触发SSL错误。可以尝试在站点配置中添加localhost作为额外域名:

    service.internal.example.com, localhost {
        # 原有配置
    }
    
  • 强制指定SNI验证
    部分情况下,仅设置Host头可能不会让curl正确发送SNI信息。尝试在curl命令中显式指定SNI,看是否能正常请求:

    curl https://localhost/ -H "Host: service.internal.example.com" -v --servername service.internal.example.com
    

    如果请求成功,说明之前的问题是SNI未正确发送导致Caddy返回了错误的证书。

  • 检查Caddy证书关联与加载状态
    进入Caddy容器,查看证书存储目录(默认路径为/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/service.internal.example.com),确认证书文件(service.internal.example.com.crt和service.internal.example.com.key)存在且有效。
    同时执行caddy list-config命令,查看当前加载的站点配置,确认service.internal.example.com的证书已正确绑定到443端口,且该端口监听的是0.0.0.0(确保localhost请求能被接收)。

  • 追踪Caddy实时请求日志
    在发起curl请求的同时,查看Caddy的实时日志(可通过docker logs -f <caddy-container-name>查看),观察请求是否被正确路由到service.internal.example.com的站点。如果日志显示请求匹配到了其他站点(比如默认的:443站点),说明Host头的识别存在问题,需要调整Caddy的站点匹配优先级。

  • 验证容器内localhost的监听对象
    在容器内执行ss -tulpn | grep 443,确认443端口是被Caddy进程监听,而非其他服务。如果存在其他服务占用443端口,localhost的HTTPS请求会被该服务处理,自然会出现证书不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:57:14