目前,我已经通过以下方式设置了注册表:
docker run -d \
-p 10.0.1.4:443:5000 \
--name registry \
-v `pwd`/certs/:/certs \
-v `pwd`/registry:/var/lib/registry \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/certificate.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/private.key \
registry:latest
使用Docker 17.06.2-ce版本构建cec0b72
我已经从Let's Encrypt获得了certificate.crt,private.key和ca_bundle.crt。在nginx服务器上使用这些证书时,我能够建立https连接,而不必显式信任客户端计算机/浏览器上的证书。
是否可以通过docker注册表设置用户体验,类似于通过https访问CA认证的网站,而浏览器/计算机信任根CA和整个链中的根CA(包括我的证书),因此可以为用户提供体验?
注意:
我当然可以按照本教程中的描述在客户端docker文件中指定证书:https://docs.docker.com/registry/insecure/#use-self-signed-certificates。但是,这不足以满足我的需求。
curl -v https://docks.behar.cloud/v2/
的输出:* Trying 10.0.1.4...
* TCP_NODELAY set
* Connected to docks.behar.cloud (10.0.1.4) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: docks.behar.cloud
* Server certificate: Let's Encrypt Authority X3
* Server certificate: DST Root CA X3
> GET /v2/ HTTP/1.1
> Host: docks.behar.cloud
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 2
< Content-Type: application/json; charset=utf-8
< Docker-Distribution-Api-Version: registry/2.0
< X-Content-Type-Options: nosniff
< Date: Sun, 10 Sep 2017 23:05:01 GMT
<
* Connection #0 to host docks.behar.cloud left intact
最佳答案
Docker通常将使用操作系统提供的CA bundle 软件,因此由受信任的根签名的证书应无需额外配置即可工作。
让我们用cross signed(DST根CA X3)来加密证书的IdentTrust root certificate,因此大多数CA bundle 软件应该已经信任他们的证书。 Lets Encrypt root cert(ISRG Root X1)也已分发,但由于较新而不会广泛传播。
Docker 1.13+将使用主机系统CA bundle 包来验证证书。 Prior to 1.13 this may not happen if you have installed a custom root cert。因此,如果您在没有任何TLS警告的情况下使用curl
,那么docker
命令也应该起作用。
关于ssl - 是否可以为不安全的Docker注册表提供CA签名的证书,以便客户端自动信任它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46143531/