Traefik v2为CNAME指向子域名生成SSL证书报tls: bad certificate求助
问题根因定位
从你提供的错误日志可以直接确定,证书生成失败和CNAME配置、Let's Encrypt限流完全无关,核心问题是Traefik容器无法正常解析公网域名,连不上Let's Encrypt的ACME API服务器。错误日志中的lookup acme-v02.api.letsencrypt.org on 127.0.0.11:53: i/o timeout已经明确指向Docker内部DNS解析超时故障。
针对你最开始的疑问:子域名通过CNAME解析到其他服务器的场景,反向代理为该子域名生成SSL证书不需要额外配置,只要该子域名最终解析到反向代理所在的服务器,ACME TLS挑战就能正常完成,你当前的DNS解析配置本身没有问题。
解决步骤
按优先级依次排查修复:
- 首先验证Server2(222.222.222.222)宿主机的网络连通性:在宿主机执行命令
curl https://acme-v02.api.letsencrypt.org/directory,如果宿主机也请求超时,说明是服务器本身的出口网络问题,比如防火墙阻断了443端口出站请求、运营商屏蔽了Let's Encrypt的API地址,先解决宿主机网络连通性即可。 - 如果宿主机请求正常,说明是Docker内置DNS(127.0.0.11)解析失效,在你的docker-compose配置的Traefik服务块中手动指定公网DNS即可,修改后的Traefik配置示例如下:
traefik: image: "traefik:v2.4.7" # 新增dns配置块 dns: - 223.5.5.5 - 8.8.8.8 command: # 保持你原来的command配置不变 - "--log.level=DEBUG" # ...其余原有配置不变
- 配置修改完成后执行
docker-compose up -d重建Traefik容器,进入容器内部执行nslookup acme-v02.api.letsencrypt.org确认解析正常后,即可正常申请SSL证书。
内容的提问来源于stack exchange,提问作者user2366975
相关产品推荐
相关产品推荐

