管理必须使用 TLS 的 Docker 容器的证书/密钥的最佳方法是啥

Posted

技术标签:

【中文标题】管理必须使用 TLS 的 Docker 容器的证书/密钥的最佳方法是啥【英文标题】:What is the best way to manage cert/key for Docker containers that must talk TLS管理必须使用 TLS 的 Docker 容器的证书/密钥的最佳方法是什么 【发布时间】:2014-12-06 22:48:23 【问题描述】:

我正在将我的应用程序移至 Docker,但我不确定如何管理证书/密钥。在单个主机中,我有两个 Docker 容器,它们必须通过 TLS 侦听/通信到许多客户端机器。在 docker 之前,我只有一个服务器密钥和自签名证书,我的客户使用自签名证书与服务器应用程序通信。

但是既然它们是独立的 docker 容器,那么正确的方法是什么?我是否将证书/密钥推送到容器中的目录?如果是这样,那么我的 dockerfile 将需要复制证书/密钥,并且我不希望密钥成为签入图像的一部分。 (安全)

或者,我是否使用 VOLUME 并将密钥/证书保存在主机上?我试过了,但是容器 root 用户看不到私钥,它是只读的,用于主机 root 用户。

真正正确的方法是什么?谢谢

【问题讨论】:

音量方式正确。文件应该是可见的,我已经多次这样做了。您是否有机会在 boot2docker 上进行测试?在这种情况下,当您挂载卷时,您需要在 boot2docker vm 中拥有源而不是您的主机。 我没有使用 Boot2docker。我将不得不返回并使用权限来查看我在做什么。当你这样做时,你将主机上的私钥设置为 400 并且它可以工作?嗯嗯 【参考方案1】:

我知道这是一个老问题,但我想出了一个有点相似但更通用的方法。我的解决方案是创建一个data-only 容器,将证书及其密钥安装为/etc/ssl/certs/host//etc/ssl/private/host/。例如将其命名为certificates。在即将推出的容器中,您可以通过 --volumes-from certificates 轻松使用这些证书。

【讨论】:

【参考方案2】:

花了我一些时间,但我想出了如何去做。

一个RUN命令行,你可以挂载一个主机目录作为一个数据卷。这在 dockerfiles 中使用 VOLUME 不起作用。您使用开关 -v hostdir:datavolume

http://docs.docker.com/userguide/dockervolumes/

我用它来将容器数据卷连接到存储密钥和证书的主机目录。

谢谢

【讨论】:

以上是关于管理必须使用 TLS 的 Docker 容器的证书/密钥的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

Secret 的使用场景 - 每天5分钟玩转 Docker 容器技术(109)

通信安全—docker建立客户端与服务端TLS证书连接

通信安全—docker建立客户端与服务端TLS证书连接

自动创建 Docker TLS 证书

ruby Docker TLS证书生成器

ruby Docker TLS证书生成器