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

Docker私有仓库推送镜像报x509未知机构签署证书错误原因咨询

Docker 与浏览器的证书校验逻辑核心差异
  • 信任根证书源不同:浏览器普遍采用「自身内置根证书库 + 操作系统根证书库 + 用户手动导入到浏览器的信任证书」三级信任源,如果你之前为了访问内网服务手动给浏览器导入过私有CA根证书,或者浏览器内置了你所用的小众CA的根证书,就能正常校验通过。而Docker daemon作为系统级后台服务,只会读取操作系统默认的全局受信任根证书存储区,不会读取任何浏览器私有的证书配置,只要对应CA没被加入系统根证书信任列表,就会抛出未知签发者错误。
  • 证书链校验逻辑不同:浏览器支持中间证书缓存补全——如果你的私有registry服务器只配置了叶子证书、没有返回完整的证书链(叶子证书+所有中间CA证书),只要浏览器之前访问过同一CA签发的其他站点、已经缓存了对应的中间证书,就会自动补全证书链完成校验。而Docker没有中间证书缓存机制,强制要求服务器端返回完整的证书链,只要缺了任意一级中间证书,就会校验失败。
  • 域名匹配规则严格度不同:目前所有主流Docker版本都已经废弃了证书Common Name(CN)字段的域名匹配逻辑,仅会校验证书Subject Alternative Name(SAN)字段中是否包含仓库域名。而大部分浏览器仍然兼容CN字段的匹配逻辑,如果你的证书仅在CN中填写了仓库域名、没有加入SAN扩展字段,浏览器可以正常校验通过,Docker会直接判定证书无效。
对应排查方案
  • 校验服务器证书链完整性:使用命令 openssl s_client -connect host.domain:443 -showcerts 检查返回的证书链,确认包含从叶子证书到根证书的所有层级,缺失的话需要把中间证书按顺序拼接在registry使用的crt证书文件末尾。
  • 新增系统级根证书信任:如果你的证书由自签CA或者小众CA签发,需要将CA根证书导入Docker所在机器的系统根证书存储区:
    • Debian/Ubuntu 系统:将根证书文件放到 /usr/local/share/ca-certificates/ 目录下,执行 update-ca-certificates 命令更新信任列表
    • CentOS/RHEL 系统:将根证书文件放到 /etc/pki/ca-trust/source/anchors/ 目录下,执行 update-ca-trust extract 命令更新信任列表
      配置完成后需要重启Docker服务生效。
  • 检查证书SAN扩展:使用命令 openssl x509 -in 你的证书文件.crt -text -noout | grep -A 10 "Subject Alternative Name" 确认你的仓库域名存在于SAN列表中,不存在的话需要重新签发包含对应SAN的证书。

内容的提问来源于stack exchange,提问作者andreas.teich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:36:04