You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nexus私有Docker镜像拉取失败:x509证书验证错误求助

解决Docker拉取私有镜像时的x509证书验证失败问题

这个错误的核心原因很明确:你的自签名SSL证书没有包含IP地址的SAN(Subject Alternative Name)字段。虽然你已经把证书放到了Docker的certs.d目录,但Docker在验证证书时,会严格检查SAN是否匹配目标IP——哪怕证书的CN(通用名称)是这个IP也没用,这是当前TLS安全规范的硬性要求。

下面是一步步的解决方法:

1. 重新生成包含IP SAN的自签名证书

首先创建一个自定义的OpenSSL配置文件,用来指定SAN字段。比如新建openssl-san.cnf文件,内容如下:

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = 101.102.103.104
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
IP.1 = 101.102.103.104

然后用这个配置生成新的证书和密钥:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout nexus.key -out nexus.crt -config openssl-san.cnf

2. 更新Nginx和Nexus的证书

把新生成的nexus.keynexus.crt替换掉你之前在Nginx配置中使用的证书文件,同时确保Nexus的Docker仓库配置也指向新的证书(如果Nexus本身直接使用证书的话)。之后重启Nginx和Nexus服务:

# 重启Nginx
systemctl restart nginx
# 重启Nexus(根据你的启动方式调整,比如用systemd管理的话)
systemctl restart nexus

3. 更新Docker主机的证书并重启Docker

先删除Docker主机上旧的证书:

rm /etc/docker/certs.d/101.102.103.104:5051/nexus.crt

把新生成的nexus.crt复制到这个目录:

cp nexus.crt /etc/docker/certs.d/101.102.103.104:5051/

最后重启Docker服务,让配置生效:

systemctl restart docker

4. 验证证书是否正确配置

你可以用下面的命令检查新证书是否包含IP SAN:

openssl x509 -in nexus.crt -text -noout | grep -A 10 "Subject Alternative Name"

如果输出里能看到IP Address:101.102.103.104,说明证书已经正确包含了IP SAN字段。

现在再尝试执行docker pull 101.102.103.104:5051/docker-image-14:1,应该就能正常拉取镜像了。

内容的提问来源于stack exchange,提问作者user4948798

火山引擎 最新活动