gpt4 book ai didi

java - 如何在 Docker 容器中向 Tomcat 添加 SSL 证书?

转载 作者:IT老高 更新时间:2023-10-28 21:24:49 26 4
gpt4 key购买 nike

我是 Docker 新手,正在努力学习它。我在 Windows 7 上使用 Docker 快速启动终端。我有一个简单的要求,我在 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 调用外部 Web 服务时,都会出现 SSL 握手错误。

我还有一个 Java keystore 。我也尝试在我的 Docker 文件中使用 Java,并尝试使用 keystore ,但同样徒劳无功。

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

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

最佳答案

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

I've the certs for the remote hosts.

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

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

首先你需要转换证书:

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

然后将其安装到 jvm keystore 中:

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

此命令询问您是否真的要添加证书,您应该输入"is"。

全部放在一个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

并检查 keystore :

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

关于java - 如何在 Docker 容器中向 Tomcat 添加 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46923699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com