Docker登录私有镜像仓库报x509证书无有效名称匹配myregistry.lk故障
问题根因
你遇到的x509: certificate is not valid for any names, but wanted to match myregistry.lk报错,核心原因是生成自签名证书时未将myregistry.lk加入**使用者可选名称(SAN,Subject Alternative Name)**字段。Docker 20.10及以上版本不再支持仅通过证书Common Name字段校验域名归属,必须匹配SAN字段才会判定证书有效。
仓库所在节点可正常登录,大概率是该节点Docker配置了insecure-registries参数跳过了证书校验,其余节点未配置该参数因此触发了严格的证书校验规则。
解决步骤
- 第一步:重新生成带SAN字段的自签名证书
先创建证书配置文件san.conf,可根据实际业务场景修改配置项:
执行命令生成有效期10年的证书和密钥文件:[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn x509_extensions = v3_req [dn] C = CN ST = Beijing L = Beijing O = MyOrg OU = MyTeam CN = myregistry.lk [v3_req] subjectAltName = @alt_names extendedKeyUsage = serverAuth [alt_names] DNS.1 = myregistry.lk # 若需通过IP访问仓库,可追加配置:IP.1 = 仓库节点实际IPopenssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout registry.key -out registry.crt -config san.conf - 第二步:替换私有仓库服务使用的旧证书、密钥文件,重启仓库服务使配置生效
- 第三步:将新生成的
registry.crt分发到所有访问节点,覆盖原有证书文件:cp registry.crt /etc/docker/certs.d/myregistry.lk:5000/ca.crt # 确保证书文件权限正常 chmod 644 /etc/docker/certs.d/myregistry.lk:5000/ca.crt - 第四步:重启节点Docker服务加载新的证书配置:
systemctl restart docker
校验方法
执行以下命令验证证书SAN配置是否正确:
openssl x509 -in registry.crt -text -noout | grep -A 10 "Subject Alternative Name"
输出结果包含DNS:myregistry.lk即为配置正确,此时执行docker login myregistry.lk:5000即可正常登录。
内容的提问来源于stack exchange,提问作者Sachith Muhandiram
相关产品推荐
相关产品推荐

