Ssl 使用Letsencrypt证书设置Docker注册表

Ssl 使用Letsencrypt证书设置Docker注册表,ssl,https,ubuntu-14.04,docker-registry,lets-encrypt,Ssl,Https,Ubuntu 14.04,Docker Registry,Lets Encrypt,我正在设置域注册表,如下所述: 我为docker.mydomain.com生成了一个证书,并在我的服务器上使用其命令启动了docker: 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/dom

我正在设置域注册表,如下所述:

我为docker.mydomain.com生成了一个证书,并在我的服务器上使用其命令启动了docker:

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 \
  registry:2
我启动了docker,并指出了我使用letsencrypt()获得的证书

现在,当我浏览到时,我将得到一个只有“{}”的页面,带有一个绿色锁(成功的安全页面请求)

但是当我尝试从另一台服务器登录docker.mydomain.com:5000时,我在注册表docker中看到一个错误:

 TLS handshake error from xxx.xxx.xxx.xxx:51773: remote error: bad certificate
我在设置证书时尝试了一些不同的方法,但出现了如下错误:

remote error: unknown certificate authority


我缺少什么?

Docker接缝不支持:

更新:Docker现在应该支持SNI

这意味着,在tls事务期间连接到服务器时,docker客户端不指定域名,因此服务器显示默认证书

解决方案可能是将服务器的默认证书更改为对docker域有效的证书

此网站仅在支持SNI的浏览器中工作


要检查您的(子)域是否与不支持SNI的客户端协同工作,您可以使用ssllabs.com/ssltest:如果您没有看到消息,“此站点仅在支持SNI的浏览器中工作。”那么它将正常工作。

我的服务器正在www.mydomain.com上运行ssl,因此我需要指向该证书,然后在另一个端口上设置docker,比如www.mydomain.com:5000?现在可以用了,但是根据你的链接和评论,子域也可以用吗?无论如何,感谢您的回答,我现在可以继续。SNI的工作方式是:SNI感知客户端发送未加密的域名。SNI感知服务器使用该信息来决定显示哪个证书。如果客户端不知道SNI,则服务器无法决定显示哪个证书。在大多数情况下,服务器将显示声明的第一个证书,因此不知道SNI的客户端将只在该证书中列出的域上工作。如果该证书还包含子域或是通配符,它将工作。要检查您的(子)域是否与不支持SNI的客户端一起工作,您可以使用:如果您没有看到消息,“此站点仅在支持SNI的浏览器中工作。”然后它将工作。Docker现在支持SNI。
 tls: first record does not look like a TLS handshake