我正在尝试设置私有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'
答案 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