未知权限签署的“ docker pull”证书

Che*_*Xie 9 ssl curl docker

我试图从Docker注册表中提取Docker映像,但遇到以下问题:

$ docker pull <docker registry>/<image name>/<tag> 
Error response from daemon: Get <docker registry>/v1/_ping: x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)

我尝试使用“ curl”并得到类似的错误消息:

 curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
Run Code Online (Sandbox Code Playgroud)

因此,我使用以下命令下载了CA证书并导入到服务器(RedHat Linux 7)中:

cp root_cert.cer /etc/pki/ca-trust/source/anchors/
update-ca-trust
Run Code Online (Sandbox Code Playgroud)

导入根证书后,我可以看到curl它工作正常,因为它不会抱怨证书错误,但是,如果我使用,docker pull我仍然会遇到同样的问题。是docker使用不同于CA证书的位置curldocker pull在这种情况下如何解决该问题?

小智 23

这是一个快速的解决方案:

  • 编辑或创建文件 /etc/docker/daemon.json 并添加 insecure-registries :

docker.squadwars.org 的示例:

{
    "insecure-registries" : ["docker.squadwars.org:443"]
}
Run Code Online (Sandbox Code Playgroud)
  • 重启 docker 守护进程
systemctl restart docker
Run Code Online (Sandbox Code Playgroud)
  • 创建一个与主机同名的目录。

docker.squadwars.org 的示例:

mkdir -p /etc/docker/certs.d/docker.squadwars.org
Run Code Online (Sandbox Code Playgroud)
  • 获取证书并将其保存到创建的目录中。
ex +’/BEGIN CERTIFICATE/,/END CERTIFICATE/p’ <(echo | openssl s_client -showcerts -connect docker.squadwars.org:443) -scq > /etc/docker/certs.d/docker.squadwars.org/docker_registry.crt
Run Code Online (Sandbox Code Playgroud)

  • 如果你指示docker“不安全”,为什么还需要安装cert? (6认同)

m0z*_*4rt 15

对于 Ubuntu 20

sudo update-ca-certificates --fresh

openssl s_client -showcerts -verify 5 -connect registry-1.docker.io:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/docker.crt

openssl s_client -showcerts -verify 5 -connect production.cloudflare.docker.com:443 < /dev/null 2>/dev/null | openssl x509 -outform PEM | tee ~/docker-com.crt

sudo cp ~/docker-com.crt /usr/local/share/ca-certificates/.

sudo cp ~/docker.crt /usr/local/share/ca-certificates/


sudo update-ca-certificates
sudo service docker restart
Run Code Online (Sandbox Code Playgroud)


Zer*_*ion 11

对于 MacOS Docker 桌面用户:

在浏览器中转到存储库的 URL。您可能必须接受所有安全提示。

单击地址栏上的挂锁,然后单击“证书”(在 Chrome 上)或“显示证书”(在 Safari 上)。

单击并按住证书的大纸图标并将其拖动到您喜欢的文件夹或桌面。

打开您的终端(确保将最后一个参数替换为您文件的位置):

security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db ~/<<<somefolder>>>/<<<yourserver.cer>>>
Run Code Online (Sandbox Code Playgroud)

重启你的 docker 引擎。


mat*_*son 8

  • 首先创建一个文件- /etc/docker/daemon.json
  • 比运行以下命令添加证书

    openssl s_client -showcerts -connect <registry_address>:<registry_port> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/docker/certs.d/<registry_address>/ca.crt
    
    Run Code Online (Sandbox Code Playgroud)

无需重启即可工作

要么

导入证书到系统像

  • XXX:创建空的 `/etc/docker/daemon.json` 并使用 `systemctl restart docker` 重新启动 docker 导致我的 docker 守护进程死亡。我必须删除创建的文件才能再次运行它。 (3认同)

BMi*_*tch 7

您可能需要重新启动docker服务以获取它以检测OS证书中的更改。

Docker确实有一个额外的位置,您可以用来信任单个注册表服务器CA。您可以将CA证书放入其中/etc/docker/certs.d/<docker registry>/ca.crt。如果在image标签中指定了端口号,请添加端口号,例如

/etc/docker/certs.d/my-registry.example.com:5000/ca.crt
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!`service docker restart` 修复了我更改后的问题!另一个注释很有用,因为我可以信任特定的 docker 注册表而不影响其他应用程序。 (7认同)

小智 5

就我而言,错误出在“docker login”命令上。

我为我的 ubuntu 找到的解决方案:

我通过firefox下载了crt文件(url地址栏中的锁定图标)并保存:~/mydomain:1234.crt

在那之后 :

cp ~/mydomain:1234.crt /usr/local/share/ca-certificates/
update-ca-certificates
service docker restart
Run Code Online (Sandbox Code Playgroud)


Min*_*yen 5

对于使用 CentOS 7 的任何人来说,这对我有用:

  • 获得必要的证书(例如从您的公司获得)
  • 将证书复制到 ca-trust 位置:
sudo cp -p abc.crt /etc/pki/ca-trust/source
Run Code Online (Sandbox Code Playgroud)
  • 更新证书:
sudo update-ca-trust extract
Run Code Online (Sandbox Code Playgroud)
  • 重新加载守护进程并重新启动 docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)


and*_*wps 5

对我来说,我最终这样做是为了让它发挥作用:

sudo cp -p abc.crt /etc/pki/ca-trust/source/anchors
sudo update-ca-trust
sudo update-ca-trust extract
sudo systemctl daemon-reload
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)