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

112次阅读
没有评论

共计 4027 个字符,预计需要花费 11 分钟才能阅读完成。

本篇内容主要讲解“私有安全 docker registry 授权访问实验分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“私有安全 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 authority
v1 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 authority
v1 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 certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
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.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you d like to turn off curl s verification of the certificate, use
the -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 授权访问实验分析”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4027字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)