繁体   English   中英

Docker注册表登录失败,并显示“由未知权限签名的证书”

[英]Docker registry login fails with “Certificate signed by unknown authority”

我正在使用S3存储在ubuntu上运行私有docker注册表。 我遇到问题,让docker login / push / pull命令通过SSL工作。 我在Gunicorn面前使用Nginx来运行注册表。 它在HTTP上没有任何问题,但在为prod系统切换到HTTPS后,它会从客户端docker登录中抛出以下错误。

Invalid Registry endpoint:  x509: certificate signed by unknown authority

我从Commodo购买了一个相当便宜的PositiveSSL证书用于此。 我确保在运行注册表的Ubuntu系统上安装了根CA和中间CA. 以下是我的服务器的nginx配置

# Default nginx site to run the docker registry

    upstream docker-registry {
      server localhost:5000;
    }

    server {
      listen 443;

      server_name docker.ommited.net;

      ssl on;
      ssl_certificate /etc/ssl/docker-registry.crt;
      ssl_certificate_key /etc/ssl/docker-registry.key;

      proxy_set_header Host       $http_host;   # required for docker client's sake
      proxy_set_header X-Real-IP  $remote_addr; # pass on real client's IP

      client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads


      location / {
        proxy_pass http://localhost:5000/;
      }
    }

我试图弄清楚如何让docker正确识别证书,或忽略证书警告。 我正在运行docker-registry版本v0.7.3,我正在使用的特定客户端是Docker版本1.1.2,构建d84a070。 另外,在浏览器中访问注册表时,可以正确识别证书。 任何帮助我指向正确方向的人都将不胜感激!

对于COMODO或StartSSL等廉价/鲜为人知的证书,您需要将整个证书链添加到与nginx一起使用的证书文件中。 许多操作系统不信任中间CA,只信任根CA,因此您需要填写主机证书和操作系统信任的根CA之间的缺失步骤。

在您收到证书的电子邮件中,您还应找到中间CA和根CA的链接。 打开docker-registry.crt文件,滚动到底部,然后附加中间CA,最后附加PositiveSSL链的根CA证书。 完成后,重新启动nginx。 你现在应该好好去。

对于RHEL主机,您可以将CA证书添加到客户端主机上的PKI CA列表中:

cp docker-registry.crt /etc/pki/ca-trust/source/anchors/docker-registry.crt
update-ca-trust
systemctl restart docker

来自https://www.happyassassin.net/2014/09/06/adding-your-freeipa-servers-ca-certificate-to-the-system-wide-trust-store-on-fedora-and-rhel/

如果你在mac上,只需将注册表添加到~/.docker/daemon.jsoninsecure-registries设置:

{
  "debug" : true,
  "experimental" : true,
  "registry-mirrors" : [],
  "insecure-registries" : ["registry.your.domain.de"]
}

如果你在某处犯了错误(我在JSON中忘了一个逗号),可能会出现启动docker守护进程后的一些问题。 即任何docker命令Error response from daemon: Bad response from Docker engine抛出Error response from daemon: Bad response from Docker engineError response from daemon: Bad response from Docker engine 稍后重启并重置以解决自身问题。

如果您使用的是letsencrypt和nginx,只需将ssl_certificate密钥从cert.pem更改为ssl_certificate fullchain.pem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM