Docker登录Sonatype Nexus失败,证书验证问题求助
解决Docker自签名证书登录失败问题
问题核心
你遇到的错误根源有两个:一是仓库证书仅依赖旧版Common Name(CN)字段,未配置SANs(主题备用名称),这是新版TLS验证的强制要求;二是你存放证书的目录名拼写错误(nexus.connect.ro应为nexus.connex.ro)。
修复步骤
1. 修正证书存放目录
先修正目录拼写错误,确保证书路径正确:
# 删除错误目录(若存在) rm -rf /etc/docker/certs.d/nexus.connect.ro # 创建正确的证书目录 mkdir -p /etc/docker/certs.d/nexus.connex.ro # 将自签名.crt证书移入正确目录 cp your-cert-file.crt /etc/docker/certs.d/nexus.connex.ro/
2. 重新生成带SANs的自签名证书(彻底解决)
如果有权限重新生成仓库证书,务必添加SANs字段,这是合规的长期解决方案。示例操作:
- 创建
openssl.cnf配置文件:
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn req_extensions = req_ext [dn] C = CN ST = 你的省份 L = 你的城市 O = 你的组织 OU = 你的部门 CN = nexus.connex.ro [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = nexus.connex.ro # 若仓库需IP访问,可添加:IP.1 = 仓库IP地址
- 生成新证书和密钥:
openssl req -new -x509 -days 3650 -keyout nexus.key -out nexus.crt -config openssl.cnf
- 将新生成的
nexus.crt替换到/etc/docker/certs.d/nexus.connex.ro/目录,同时在Nexus仓库后台更新证书和密钥。
3. 临时绕过验证(仅测试环境用)
如果暂时无法重新生成证书,可强制Docker跳过该仓库的TLS验证:
修改/etc/docker/daemon.json(确保配置正确):
{ "insecure-registries": ["nexus.connex.ro:8063"] }
重启Docker服务:
systemctl daemon-reload systemctl restart docker
⚠️ 注意:此方法会完全跳过TLS验证,存在安全风险,禁止用于生产环境。
4. 验证修复效果
重启Docker后,尝试登录仓库:
docker login nexus.connex.ro:8063
内容的提问来源于stack exchange,提问作者jtarjanyi
相关产品推荐
相关产品推荐

