溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

私有安全docker registry授權(quán)訪(fǎng)問(wèn)實(shí)驗(yàn)分析

發(fā)布時(shí)間:2021-12-14 11:33:22 來(lái)源:億速云 閱讀:218 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“私有安全docker registry授權(quán)訪(fǎng)問(wèn)實(shí)驗(yàn)分析”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“私有安全docker registry授權(quán)訪(fǎng)問(wèn)實(shí)驗(yàn)分析”吧!

實(shí)驗(yàn)環(huán)境

服務(wù)器端:使用registry v2.1啟動(dòng)容器。
客戶(hù)端:安裝了Docker的機(jī)器,準(zhǔn)備pull/push操作

實(shí)驗(yàn)條件:
registry端生成私鑰以及證書(shū):

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

并啟動(dòng):

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

實(shí)驗(yàn)一

測(cè)試不安全的訪(fǎng)問(wèn):
docker端不存放證書(shū)。直接下載鏡像

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

提示錯(cuò)誤:

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

表示訪(fǎng)問(wèn)的是安全倉(cāng)庫(kù),但是禁止訪(fǎng)問(wèn)。同樣如果docker push的話(huà)也會(huì)提示:

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

這個(gè)時(shí)候可以開(kāi)啟docker daemon的不安全訪(fǎng)問(wèn),即在/etc/defaults/docker文件里,找到DOCKER_OPT參數(shù),在后面追加–insecure-registry registry.test.com:5000。并重啟docker daemon。

再次測(cè)試docker push 和 docker pull。成功。

此時(shí)測(cè)試:

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

提示禁止訪(fǎng)問(wèn):

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參數(shù)的話(huà)可以訪(fǎng)問(wèn)到registry的相應(yīng)內(nèi)容。

實(shí)驗(yàn)二

測(cè)試安全訪(fǎng)問(wèn),證書(shū)存放在/etc/docker/certs.d/registry.test.com:5000/下面。

實(shí)驗(yàn)條件,首先使用scp命令將registry端前面生成的domain.crt拷貝到docker端。然后創(chuàng)建路徑:/etc/docker/certs.d/registry.test.com:5000/,并將domain.crt復(fù)制過(guò)去。

測(cè)試docker pull / docker push??沙晒ΑUf(shuō)明此證書(shū)是即刻生效的。

如果將domain.crt從該路徑移走,docker pull / docker push失敗。

對(duì)于curl的測(cè)試:
curl -XGET方式提示禁止訪(fǎng)問(wèn)
curl –insecure方式可訪(fǎng)問(wèn)
而使用證書(shū)的訪(fǎng)問(wèn):

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

是成功的。

實(shí)驗(yàn)三

測(cè)試安全訪(fǎng)問(wèn),證書(shū)放在/usr/local/share/ca-certificate/domain.crt。

實(shí)驗(yàn)條件,首先使用scp命令將registry端前面生成的domain.crt拷貝到docker端,然后再移動(dòng)到路徑:/usr/local/share/ca-certificate/下。

此時(shí)進(jìn)行docker push / docker pull是失敗的。需要更新證書(shū)。

使用命令更新證書(shū):

1
update-ca-certificate

現(xiàn)在再docker push / docker pull仍失敗。還需要重啟docker daemon。
重啟之后的docker push / docker pull是成功的。

測(cè)試curl,如果不帶證書(shū)的訪(fǎng)問(wèn),同樣可以正常訪(fǎng)問(wèn)。

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

在重啟了docker daemon之后,docker push / docker pull失敗。

實(shí)驗(yàn)結(jié)論

對(duì)于使用了SSL方式進(jìn)行授權(quán)訪(fǎng)問(wèn)的私有docker registry。對(duì)于它的訪(fǎng)問(wèn),有3種方式:

1. 修改docker daemon的配置,添加--insecure-registry ...的形式訪(fǎng)問(wèn)。
2. 將證書(shū)拷貝到docker的certs.d路徑下,證書(shū)只對(duì)docker daemon生效,立即生效
3. 將證書(shū)拷貝到/usr/local/share/ca-certificate/....的路徑里,證書(shū)在更新update-ca-certificate之后全局生效,docker daemon需重啟

小問(wèn)題

通過(guò)將擁有證書(shū)的一方視為可信的一方來(lái)授權(quán)訪(fǎng)問(wèn)是沒(méi)有問(wèn)題的。在這種形式里,雙方都認(rèn)為對(duì)方是可信的。

但前面也提示了可以加–insecure參數(shù)進(jìn)行不安全訪(fǎng)問(wèn),這表示docker端不在意registry是否可信,而registry端也并不阻攔docker端的訪(fǎng)問(wèn)。這樣安全性就降低了很多。

關(guān)于update-ca-certificates

通過(guò)update-ca-certificates的man page可以了解到,

它會(huì)更新/etc/ssl/certs,并讀取/etc/ca-certificates.conf,這個(gè)文件中每行都是在/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

到此,相信大家對(duì)“私有安全docker registry授權(quán)訪(fǎng)問(wèn)實(shí)驗(yàn)分析”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI