docker x509问题的处理


事情是这样的:

我搭建了一个docker的私有仓库,本来在docker客户端设置insecure-registries后(如下设置),用的是好好的。

#  在/etc/docker/daemon.json里添加insecure-registries、registry-mirror

# cat /etc/docker/daemon.json
{
  "insecure-registries": ["nexus3-docker-cicd.apps.test.openshift.com:80", "nexus3-docker-hosted-cicd.apps.test.openshift.com:80"],
  "registry-mirror": ["nexus3-docker-cicd.apps.test.openshift.com:80"]
}

# systemctl daemon-reload
# systemctl restart docker

然后,我给这个仓库的访问加上了https,既然是https了,那就不应该是insecure-registries了,所以我去掉了insecure-registries的设置(如下设置),嘿嘿嘿……

# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://nexus3-docker-cicd.apps.test.openshift.com"]
}

# systemctl daemon-reload
# systemctl restart docker

再然后,就报错了。

docker pull x509:certificate signed by unknown authority

解决方法:

我们浏览器访问一个https的网站时,由浏览器去检测https的证书的可信性。浏览器内置一些信任的CA机构,由这些CA机构颁发的证书,浏览器则认为是安全的,当我们的自签名证书提示证书不安全时,可以手动把这个证书添加到浏览器的信任列表里。

同理,当我们在用docker pull等命令时,docker调用的是系统的CA,这些证书保存在/etc/pki/certs/ca-bundle.crt中(centos系统),所以我们把网站的https证书加入到这个文件,重启服务即可。

# 把网站的https证书内容加载到系统ca-bundle中
# echo -n | openssl s_client -showcerts -connect nexus3-docker-cicd.apps.test.openshift.com:443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/pki/tls/certs/ca-bundle.crt
# systemctl daemon-reload
# systemctl restart docker

突然发现,openssl命令好强大!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM