docker X509 证书错误的终极解决办法

时间:2023-03-08 17:45:33
docker X509 证书错误的终极解决办法

最近在做Docker相关的东西,发现只要一pull镜像,就出现如下的ERROR

x509: certificate signed by unknown authority.

调查后发现,是公司IT把https证书换成了公司的证书(目的大家自己猜)。

解决思路:把替换后的证书直接用openssl拉下来,然后加入到系统(我是Ubuntu)系统证书中,然后使用update-ca-certificates更新,最后重启docker服务,成功!!

  • 方式1:
$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net: >/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/cloudfront.crt
$ update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
Adding debian:cloudfront.pem
done.
done.

上面的dseasb33srnrn.cloudfront.net是docker提示证书错误的网址。把这个网址替换成你的网站,同时把改下你要生成的证书名字就OK。

然后重启docker deamon

$ sudo service docker restart

  • 方式2:
$ echo -n | openssl s_client -showcerts -connect dseasb33srnrn.cloudfront.net: >/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> /etc/ssl/certs/ca-certificates.crt

同时替换上面的dseasb33srnrn.cloudfront.net就好了.

然后重启docker

$ sudo service docker restart
  • 结语:

我上面的方式之所以可以搞定大多数由于公司IT部门替换https证书造成的错误,是因为很多程序是使用系统默认的证书(路径)。

对于一些特殊的程序,比如python pip,不使用系统默认的证书,而是使用自己的路径,可以强制它使用*方式2*生成的证书。