Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 是否可以为不安全的docker注册表提供CA签名的证书,以便客户端自动信任它?_Ssl_Docker_Ssl Certificate_Docker Registry_Certificate Authority - Fatal编程技术网

Ssl 是否可以为不安全的docker注册表提供CA签名的证书,以便客户端自动信任它?

Ssl 是否可以为不安全的docker注册表提供CA签名的证书,以便客户端自动信任它?,ssl,docker,ssl-certificate,docker-registry,certificate-authority,Ssl,Docker,Ssl Certificate,Docker Registry,Certificate Authority,目前,我已通过以下方式设立了一个登记处: 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

目前,我已通过以下方式设立了一个登记处:

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文件中指定证书,如本教程所述:。然而,这并不能满足我的需要

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
*正在尝试10.0.1.4。。。
*TCP_节点集
*连接到docks.behar.cloud(10.0.1.4)端口443(#0)
*使用TLS_ECDHE_RSA_和_AES_128_GCM_SHA256的TLS 1.2连接
*服务器证书:docks.behar.cloud
*服务器证书:让我们加密授权X3
*服务器证书:DST根CA X3
>GET/v2/HTTP/1.1
>主持人:docks.behar.cloud
>用户代理:curl/7.54.0
>接受:*/*
> 
简短回答:是。 我的问题是因为我的操作系统没有根证书的内置信任,SSL证书就是由根证书签名的。这可能是由于我的操作系统的年龄。更多信息,请参见Matt的答案


Docker通常会使用OS提供的CA捆绑包,因此由受信任根签名的证书应该可以在没有额外配置的情况下工作

让我们通过(DST根CA X3)加密证书,因此大多数CA捆绑包应该已经信任它们的证书。(ISRG根X1)也有分布,但由于其较新,因此不会如此广泛

Docker 1.13+将使用主机系统CA捆绑包验证证书。因此,如果您在没有任何TLS警告的情况下使用
curl
,则
docker
命令也应起相同的作用。

要让DTR识别,您需要编辑,以便正确指定证书。DTR接受并具有用于
LetsEncrypt证书的特殊参数。他们也有自己的想法。您将需要安装相应的目录,这样就不会出现
不安全注册表
错误和无法识别的证书的进一步问题

...
http:
  addr: localhost:5000
  prefix: /my/nested/registry/
  host: https://myregistryaddress.org:5000
  secret: asecretforlocaldevelopment
  relativeurls: false
  tls:
    certificate: /path/to/x509/public
    key: /path/to/x509/private
    clientcas:
      - /path/to/ca.pem
      - /path/to/another/ca.pem
    letsencrypt:
      cachefile: /path/to/cache-file
      email: emailused@letsencrypt.com
    ...

你是说你想在系统上自动信任一个自签名的CA https注册表?不,对不起,我会尽量让我的帖子更清楚。由于提供/签署我的证书的证书颁发机构通常受到浏览器的信任,我希望理解为什么docker不简单地信任他们https://registryname/v2
give是否为您的注册表提供?请将输出添加到您的问题中,并使用curl-v的输出进行更新。您可以在url的末尾添加
/
,并更新输出。因此,您的意思是,如果我能够
curl-vhttps://docks.behar.cloud
那么这就意味着像docker push docks.behar.cloud/my ubuntu这样的命令会成功吗?然而,在我目前的情况下,它不是:
Gethttps://docks.behar.cloud/v1/_ping: x509:证书由未知授权机构签名
,因此可能有其他问题?请将“不安全注册表”:“docks.behar.cloud”添加到Docker
daemon.json
文件中。还有更多信息。@BenjaminBehar是的,我认为应该这样做,我只是找到了一些可能会影响这种行为的版本信息,但是,您是否使用1.13之前的版本?@GHETTO.CHiLD
不安全的注册表
有点违背了证书的目的。@Matt我同意。我已经相应地更新了我的答案。我相信这个问题更多的是一个配置问题。将证书与DTR一起使用确实需要对default configuration.yaml进行一些额外的设置和覆盖。DTR本机支持LetsEncrypt,因此应该没有问题。证书安装在注册表上。同意,我更新了我的答案,以更好地反映如何使用证书设置DTR的问题,这需要对配置进行一些更改。yaml。