Docker与Traefik v2.5本地部署出现SEC_ERROR_INADEQUATE_KEY_USAGE错误如何解决?
问题根因与修复方案
一、SEC_ERROR_INADEQUATE_KEY_USAGE报错修复
这个报错是因为Traefik没有成功申请到有效的Let's Encrypt证书,默认返回了自签证书导致,和你配置的几个错误有关:
- 本地域名无法通过HTTP challenge申请公网证书
Let's Encrypt的HTTP challenge要求你的域名必须公网可解析、80端口公网可访问,你当前用的localhost、traefik.localhost都是本地域名,无法通过公网校验,证书申请必然失败,自然只能返回Traefik默认自签证书触发安全报错。
本地部署可以选择两种方案:
- 改用DNS challenge申请泛域名证书,需要你的域名托管在支持API操作的服务商处
- 手动生成本地信任的自签证书,在Traefik动态配置中加载使用
- 配置文件存在多处语法/逻辑错误
- 静态配置
traefik.yml中没有声明file provider,你挂载的./config目录下的动态配置完全没有生效,你定义的中间件、TLS配置都不会加载,需要在providers节点下新增:
providers: # 保留原有的docker配置不变,新增以下内容 file: directory: /configurations watch: true
- 两个证书解析器共用同一个
acme.json存储文件会产生写入冲突,删除没用的http证书解析器配置即可 - 测试服务的标签语法错误,
traefik.enable:true要改为traefik.enable=true - 宿主机的
acme.json文件权限必须为600,否则Traefik无法写入证书,执行命令修复:sudo chmod 600 ./acme/acme.json
二、HTTP转HTTPS重定向规则说明
不需要每个新增服务单独配置,你当前在Traefik本身的标签中定义的全局catchall规则已经覆盖了所有80端口的请求,所有HTTP请求都会自动跳转HTTPS,无需额外给每个服务加重复配置。
三、测试方法
- 修复所有配置错误后重启Traefik栈,执行
docker compose logs traefik查看日志,确认没有配置加载报错 - 测试重定向是否生效:执行
curl -v http://localhost,查看返回头是否有301/302跳转指向HTTPS地址 - 本地测试服务可用性可以先临时跳过证书校验:执行
curl -k https://localhost,确认可以返回静态页面内容 - 证书问题解决后,直接在浏览器访问对应地址即可正常加载。
内容的提问来源于stack exchange,提问作者Royce
相关产品推荐
相关产品推荐

