Docker:LetsEncrypt 用于 "Https everywhere" 的开发

Docker: LetsEncrypt for development of "Https everywhere"

在开发、测试和暂存期间,我们有各种 docker 服务器作为虚拟机来来去去。最终,此过程中的 docker 图像将到达具有明确定义的主机名和域名的客户机器。然而,在那之前所有的机器都只是我们的内部网络。在客户部署的环境中,所有 'http' 内部或外部通信均通过 HTTPS。鉴于此意图,非常希望使用 useable/testable SSL 证书连接所有容器。

One, two, three 以及许多 docker/letsencrypt/nginx 教程在最后描述了如何执行此操作,而不是在开发过程中。有谁知道这样的集中设置是否可行?我是否需要让最里面的 docker 容器(我们的容器恰好包含一个 Tomcat webapp)有一个 public 域?还是这完全不切实际[即使知道这一点肯定会有很大帮助!]?如果这种用法是可能的,可能有人知道(或知道)需要做什么才能使这种功能发挥作用吗?

更新

以防上面说的不清楚。我想运送 Docker 个容器,其中一个可能是 letsencrypt/nginx 代理。 Docker Hub 上有很多选择。但是,我不知道如何为所有机器都在内部网络上的 development/test 设置这样的系统。证书可以是 'test' - 需要允许 HTTPS/TLS,而不是 Chrome 中的绿锁!这将允许进行大量测试(即正确锁定 HTTP,关闭 TLSv1.0 以避免某些漏洞等)。

我建议你忘掉 Letsencrypt。该服务的价值主张真正集中在 "getting that green lock in the browser",您明确表示不需要。

此外,Letsencrypt 需要访问您的服务器以验证 ACME 质询文件是否存在,这意味着是的,您需要每个此类服务器都有一个可公开访问的域。因此,您需要拥有域并让 DNS 指向您的特定服务器,这在测试环境中听起来并不理想。

总而言之,我认为您尝试使用错误的工具来满足您的需求。尝试使用常规 self-signed 证书 as described in this question。为此,必须将连接的客户端设置为不验证证书。

或者您可以更上一层楼 create your own CA。为此,您需要让所有容器都导入该根证书,以便它们信任它。

当然,一旦您将 containers/images 投入生产,请不要忘记撤消这些操作并获得真正有效的证书。这时候 Letsencrypt 就派上用场了。