docker中证书的最佳实践

时间:2016-08-24 09:07:45

标签: ssl docker

如果我有一个满足以下条件的docker应用程序(J2EE Web应用程序):

  • 要在不同的主机上部署多个容器(来自同一图像),然后通过SSL / TLS相互通信 - 因此容器需要自己的SSL证书,并且需要信任其他容器的证书容器
  • 这些容器还将对其他外部URL进行HTTPS调用 - 因此这些服务器的证书也需要受到信任。这些外部URL在部署时是未知的,因此需要单独导入证书
  • 作为J2EE Web应用程序的应用程序使用java密钥库和信任库作为证书

鉴于此,如何将证书提供给服务器?

2 个答案:

答案 0 :(得分:4)

更新:2018-02

Docker Swarm允许保密。 https://docs.docker.com/engine/swarm/secrets/ 但是,在非Swarm部署中不支持此功能。解决这个问题的一种方法是将部署为1个节点作为Swarm。

上一个回答:

Docker目前还没有办法处理机密(它在路线图上)。在Docker上有一个长期运行的线程。它列出了人们用于将秘密导入容器的许多方法。 https://github.com/docker/docker/issues/13490

有些人使用HashiCorp的保险柜,其他人加密主机上的秘密(env vars)或docker卷(这是我的团队所做的)。容器可以在启动时解密它们(ENTRYPOINT / COMMAND)。要在运行时添加机密,您可以创建一个自定义容器(接受http请求并将其存储在信任库中)。您可以在上面的链接中看到许多建议。

答案 1 :(得分:-1)

应用程序应在内部处理:

如果你有一个在docker容器中运行的java应用程序,你可以使用java密钥库(然后将其他容器pem添加到Dockerfile中的应用程序密钥库)

# import my domaincert
COPY homelinux.org.pem /tmp/homelinux.org.pem
RUN /usr/bin/keytool -import -alias homelinux.org -keystore ${JAVA_HOME}/jre/lib/security/cacerts -trustcacerts -file /tmp/homelinux.org.pem -storepass changeit -noprompt

我在* .homelinux.org上通过dyndns和a有~15个容器 * .homelinux.org自签名域证书(dnsname=*.homelinux.org)所以容器可以在它们之间使用ssl。