如何在 Docker 容器中将 SSL 证书添加到 Tomcat?

新手上路,请多包涵

我是 Docker 的新手,正在尝试学习它。我在 Windows 7 上使用 Docker Quickstart Terminal。我有一个简单的要求,我在 Docker 容器中使用 Tomcat。我的 DockerFile 如下:

 FROM tomcat:8.0.47-jre7
RUN cd /usr/local/tomcat/webapps
COPY test.war /usr/local/tomcat/webapps/test.war

然后我在 Docker 控制台中发出简单的构建和运行命令。

test.war 是一个 Java 网络服务。此 Web 服务使用 HTTPS 在内部调用远程主机上的其他 Web 服务。我有远程主机的证书。

我尝试了互联网上可用的几种方法来将这些证书导入或复制到不同论坛/博客上提到的不同位置,但没有成功。每当我使用 HTTPS 从 test.war 调用外部网络服务时,它都会给我 SSL 握手错误。

我还有一个 Java 密钥库。我也尝试在我的 Docker 文件中使用 Java,并尝试使用密钥库,但再次失败。

当我在直接安装在我机器上的 tomcat 上使用相同的 test.war 时,它工作得非常好。

有人可以通过提供在这种情况下能够导入/使用 SSL 证书/密钥库的步骤来帮助我吗?另外,如何导入多个证书?

原文由 Gagan Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 832
1 个回答

您可以尝试将证书导入到 docker 中的 jvm 可信存储中。

我有远程主机的证书。

您可以使用这些证书,但实际上您不需要它们,您只需要颁发证书的机构的根证书。您可以从互联网上下载它。

通常它们以 pem 格式给出,但你需要 der 用于 jvm。

首先你需要转换证书:

 openssl x509 -in ca.pem -inform pem -out ca.der -outform der

然后将其安装到 jvm 密钥库中:

 keytool -importcert -alias startssl -keystore \
    $JAVA_HOME/lib/security/cacerts -storepass changeit -file ca.der

此命令询问您是否真的要添加证书,您应该键入“是”。

一起放在 Dockerfile 中:

 FROM tomcat:8.0.47-jre7

COPY ca.pem ca.pem

RUN openssl x509 -in ca.pem -inform pem -out ca.der -outform der

RUN echo yes | keytool -importcert -alias startssl -keystore \
    /docker-java-home/jre/lib/security/cacerts -storepass changeit -file ca.der

COPY test.war /usr/local/tomcat/webapps/test.war

WORKDIR /usr/local/tomcat/webapps

注意:如果您已经拥有 der 格式的证书,则不需要 openssl 调用,直接复制证书即可。

要验证证书是否真正应用,您可以运行容器,ssh 进入它

$ docker exec -it <CONTAINER-ID> bash

并检查密钥库:

 $ keytool -keystore "/docker-java-home/jre/lib/security/cacerts" -storepass changeit -list | grep <NAME-OF-YOUR-CERT-AUTHORITY>

原文由 Sasha Shpota 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题