如何安全地向 Docker 应用程序提供 SSL 证书

信息安全 tls 码头工人
2021-08-28 08:27:48

向 Docker 应用程序提供 SSL 证书(用于 HTTPS)的最安全方法是什么?

我考虑过的方法:

  1. 环境

    对 Docker 应用程序使用12factor方法很常见(但显然不是必需的),这会建议环境变量,这被认为是安全的,但证书链对于环境变量可能有点长且笨拙(并不是说这是一个完整的交易破坏者)。

  2. 私人形象

    我还可以创建一个自定义的私有 Docker 映像,但如果我没有使用私有 Docker 存储库(而且我没有——我目前正在使用 Docker Hub),这意味着我至少信任另一方秘密。如果我使用自动构建,那也意味着信任另一方(即 GitHub)。

  3. 已安装的卷

    与传递必须处理的长环境变量相比,这似乎不那么笨拙。但到目前为止,我根本不需要本地卷,如果这是需要我使用的一件事,这似乎有点不幸。但也许这就是为安全付出的代价?

从安全的角度来看,最好的选择是什么?还是我没有考虑过这些方法的优缺点?

作为参考,我当前的 Docker 映像托管在 Docker Hub 上,由 GitHub 自动构建创建,容器在 Tutum 上运行。我的 Docker Hub 和 GitHub 存储库目前是私有的,但我希望稍后在项目成熟一点时将它们公开。尽管我希望得到一个足够通用的答案,以便比在此特定设置中更广泛地应用。

2个回答

环境变量方法的一个挑战是它们与任何链接的容器共享(更多信息在这里),这可能会限制在某些设置中使用该方法。

正如您所说,私有图像是一个问题,因为您要与多方共享密钥,这也可能影响您使用其他相关服务的能力,这些服务需要访问 github 或 docker 存储库(例如Jenkins

这留下了安装卷解决方案,从安全角度来看,这似乎是最好的方法。它限制了对 docker 主机的必要分发,在大多数情况下,与将其放置在第 3 方或可能将其暴露给其他链接的容器相比,这更少暴露。

如果有人遇到此主题,请注意最近的解决方案可能是使用 Docker 机密: https ://docs.docker.com/engine/swarm/secrets/

它使 Docker Swarm 服务能够将密码、SSL 证书等信息安全地传输到容器中。