ssl – 使用Letsencrypt证书设置Docker注册表

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

https://docs.docker.com/registry/deploying/

我为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(https://letsencrypt.org/)获得的证书.

现在,当我浏览到https://docker.mydomain.com:5000/v2/时,我将得到一个只有“{}”的页面,带有绿色锁定(成功的安全页面请求).

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

 TLS handshake error from xxx.xxx.xxx.xxx:51773: remote error: bad certificate

我在设置证书时尝试了一些不同的变体,并得到了如下错误:

remote error: unknown certificate authority

 tls: first record does not look like a TLS handshake

我错过了什么?

最佳答案
Docker接缝不支持SNIhttps://github.com/docker/docker/issues/9969

更新:Docker现在应该支持SNI.

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

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

此站点仅适用于支持SNI的浏览器.

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

转载注明原文:ssl – 使用Letsencrypt证书设置Docker注册表 - 代码日志