Docker Private Registry:x509:由未知权限签名的证书

时间:2016-08-27 05:00:27

标签: docker

我正在尝试设置私有docker注册表,由反向nginx代理保护,该代理通过客户端证书验证用户。

我得到的错误是:

  

x509:由未知权限签署的证书

根据文档,您应该能够将证书添加到/etc/docker/certs.d/,我已经这样做了。 Docker似乎看到了证书的位置:

  

EBU [0015]调用POST /v1.24/images/create?fromImage=docker.squadwars.org%2Froster&tag=latest       DEBU [0015] hostDir:/etc/docker/certs.d/docker.squadwars.org       DEBU证书:/etc/docker/certs.d/docker.squadwars.org/client.cert       DEBU密钥:/etc/docker/certs.d/docker.squadwars.org/client.key       DEBU crt:/etc/docker/certs.d/docker.squadwars.org/docker.squadwars.org.crt       DEBU [0015] hostDir:/etc/docker/certs.d/docker.squadwars.org       DEBU证书:/etc/docker/certs.d/docker.squadwars.org/client.cert       DEBU密钥:/etc/docker/certs.d/docker.squadwars.org/client.key       DEBU crt:/etc/docker/certs.d/docker.squadwars.org/docker.squadwars.org.crt       DEBU [0015]试图从https://docker.squadwars.org v2拉出docker.squadwars.org/roster       警告[0015]获取v2注册表时出错:获取https://docker.squadwars.org/v2/:x509:由未知权限签名的证书       ERRO [0015]在错误之后尝试下一个端点:获取https://docker.squadwars.org/v2/:x509:由未知权限签署的证书

我还尝试将证书文件从mydomain.org重命名为'ca.crt',调试日志再次显示它,但它没有任何效果。

我可以像这样使用curl:

curl --key client.key --cert client.cert https://docker.squadwars.org/

我也可以添加--cacert选项来卷曲,无论哪种方式都有效。

docker文档说如果您仍有问题,则应在操作系统级别添加证书。我根据instructions

这样做了

(这可能就是为什么我不需要-cacert with curl,虽然我很困惑,因为我已经删除了证书但卷曲仍然有效)

这让我疯狂,任何帮助都会非常感激!

编辑:我忘了添加,最初我的证书的FQDN错了,但它现在是'docker.squadwars.org'

3 个答案:

答案 0 :(得分:1)

我首先创建了自己的证书颁发机构,如下所述:

How to create a self-signed certificate with openssl?

在这里:

How do you sign Certificate Signing Request with your Certification Authority?

我希望能够给出更好的答案,但我按照这里的说明进行操作:

https://arcweb.co/securing-websites-nginx-and-client-side-certificate-authentication-linux/

这对我不起作用。除了关于签署客户端密钥的部分。这很有用。

答案 1 :(得分:0)

我可以通过两种不同的方式解决此错误

a)将OS DTR证书添加到您的TLS存储中(推荐)。
b)允许在docker中使用不安全的注册表,将其与Ubuntu一起使用时,只需添加一个名为/etc/docker/daemon.json的文件,内容如下:

{
  "insecure-registries" : ["https://docker.squadwars.org/"]
}

答案 2 :(得分:0)

就我而言,这里建议的任何方法都不起作用。
最终我发现我安装了一个安全客户端,它就像一个“中间人”,并使用自己的证书重新签署了所有流量。
为了解决这个问题,我必须下载它的证书并将其安装在容器中:

Docker go image - cannot go get - x509: certificate signed by unknown authority