千家信息网

私有安全docker registry授权访问实验分析

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,本篇内容主要讲解"私有安全docker registry授权访问实验分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"私有安全docker registr
千家信息网最后更新 2024年11月28日私有安全docker registry授权访问实验分析

本篇内容主要讲解"私有安全docker registry授权访问实验分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"私有安全docker registry授权访问实验分析"吧!

实验环境

服务器端:使用registry v2.1启动容器。
客户端:安装了Docker的机器,准备pull/push操作

实验条件:
registry端生成私钥以及证书:

1
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

并启动:

1
2
3
4
5
6
docker run -d -p 5000:5000 --restart=always \ 
--name registry -v `pwd`/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-v /images/:/var/lib/registry \
registry:2.1

实验一

测试不安全的访问:
docker端不存放证书。直接下载镜像

1
docker pull registry.test.com:5000/test-busybox:v1

提示错误:

Error response from daemon: unable to ping registry endpoint https://registry.test.com:5000/v0/v2 ping attempt failed with error: Get https://registry.test.com:5000/v2/: x509: certificate signed by unknown authorityv1 ping attempt failed with error: Get https://registry.test.com:5000/v1/_ping: x509: certificate signed by unknown authority

表示访问的是安全仓库,但是禁止访问。同样如果docker push的话也会提示:

The push refers to a repository     [registry.test.com:5000/test-busybox] (len: 1)unable to ping registry endpoint https://registry.test.com:5000/v0/v2 ping attempt failed with error: Get https://registry.test.com:5000/v2/: x509: certificate signed by unknown authorityv1 ping attempt failed with error: Get https://registry.test.com:5000/v1/_ping: x509: certificate signed by unknown authority

这个时候可以开启docker daemon的不安全访问,即在/etc/defaults/docker文件里,找到DOCKER_OPT参数,在后面追加-insecure-registry registry.test.com:5000。并重启docker daemon。

再次测试docker push 和 docker pull。成功。

此时测试:

1
curl -XGET https://registry.test.com:5000/v2/_catalog

提示禁止访问:

curl: (60) SSL certificate problem: self signed certificateMore details here: http://curl.haxx.se/docs/sslcerts.htmlcurl performs SSL certificate verification by default, using a "bundle"of Certificate Authority (CA) public keys (CA certs). If the defaultbundle file isn't adequate, you can specify an alternate file using the --cacert option.If this HTTPS server uses a certificate signed by a CA represented inthe bundle, the certificate verification probably failed due to aproblem with the certificate (it might be expired, or the name mightnot match the domain name in the URL).If you'd like to turn off curl's verification of the certificate, usethe -k (or --insecure) option.

如果使用-k 或者 -insecure参数的话可以访问到registry的相应内容。

实验二

测试安全访问,证书存放在/etc/docker/certs.d/registry.test.com:5000/下面。

实验条件,首先使用scp命令将registry端前面生成的domain.crt拷贝到docker端。然后创建路径:/etc/docker/certs.d/registry.test.com:5000/,并将domain.crt复制过去。

测试docker pull / docker push。可成功。说明此证书是即刻生效的。

如果将domain.crt从该路径移走,docker pull / docker push失败。

对于curl的测试:
curl -XGET方式提示禁止访问
curl -insecure方式可访问
而使用证书的访问:

1
curl --cacert /etc/docker/certs.d/registry.test.com\:5000/domain.crt -XGET https://registry.test.com:5000/v2/_catalog

是成功的。

实验三

测试安全访问,证书放在/usr/local/share/ca-certificate/domain.crt。

实验条件,首先使用scp命令将registry端前面生成的domain.crt拷贝到docker端,然后再移动到路径:/usr/local/share/ca-certificate/下。

此时进行docker push / docker pull是失败的。需要更新证书。

使用命令更新证书:

1
update-ca-certificate

现在再docker push / docker pull仍失败。还需要重启docker daemon。
重启之后的docker push / docker pull是成功的。

测试curl,如果不带证书的访问,同样可以正常访问。

同样,再移除了/usr/local/share/ca-certificate/domain.crt之后,更新update-ca-certificate之后,docker pull / docker push仍成功。

在重启了docker daemon之后,docker push / docker pull失败。

实验结论

对于使用了SSL方式进行授权访问的私有docker registry。对于它的访问,有3种方式:

1. 修改docker daemon的配置,添加--insecure-registry ...的形式访问。2. 将证书拷贝到docker的certs.d路径下,证书只对docker daemon生效,立即生效3. 将证书拷贝到/usr/local/share/ca-certificate/....的路径里,证书在更新update-ca-certificate之后全局生效,docker daemon需重启

小问题

通过将拥有证书的一方视为可信的一方来授权访问是没有问题的。在这种形式里,双方都认为对方是可信的。

但前面也提示了可以加-insecure参数进行不安全访问,这表示docker端不在意registry是否可信,而registry端也并不阻拦docker端的访问。这样安全性就降低了很多。

关于update-ca-certificates

通过update-ca-certificates的man page可以了解到,

它会更新/etc/ssl/certs,并读取/etc/ca-certificates.conf,这个文件中每行都是在/usr/share/ca-certificates的文件都是可信的。

而在/usr/local/share/ca-certificates下的.crt文件也视作可信

一般ca-certificate路径有:

/etc/ca-certificates/usr/share/ca-certificates/usr/share/doc/ca-certificates/usr/local/share/ca-certificates

到此,相信大家对"私有安全docker registry授权访问实验分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0