【发布时间】:2018-04-06 00:41:13
【问题描述】:
我是 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 密钥库。我也尝试在我的 Docker 文件中使用 Java,并尝试使用密钥库,但同样徒劳无功。
当我在直接安装在我机器上的 tomcat 上使用相同的 test.war 时,它工作得非常好。
有人可以通过提供在这种情况下能够导入/使用 SSL 证书/密钥库的步骤来帮助我吗?另外,如何导入多个证书?
【问题讨论】:
-
您按照哪些步骤导入证书?
-
根据您的描述,您需要将证书添加到信任库(不要与密钥库混淆)。根据您用于拨打电话的技术,有不同的方法可以做到这一点。例如,对于 Spring Boot,它可能是这样的 stackoverflow.com/a/43235569/2065796 您还可以使用受信任的证书等更新容器内的 jvm。提供有关您如何拨打电话的更多详细信息,以便我们能够为您提供帮助。
-
与您的问题无关的评论,但您可以/应该使用
WORKDIR /usr/local/tomcat/webapps代替RUN cd /usr/local/tomcat/webapps以使其更轻量级和最佳实践友好:) -
@Rao,我尝试了以下方法: FROM registry.access.redhat.com/rhel7.1 ENV JAVA_HOME=/usr/lib/jvm/jre COPY ./certs/My_Root_CA.cer / etc/ssl/certs/ COPY ./certs/My_Issuing_CA.cer /etc/ssl/certs/ RUN $JAVA_HOME/bin/keytool -storepasswd -new mysecretpassword -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit ...
-
@Rao,还尝试了以下操作: ADD your_ca_root.crt /usr/local/share/ca-certificates/foo.crt RUN update-ca-certificates 以下位置提供的步骤:docs.docker.com/engine/security/https/… docs.docker.com/engine/security/https/#secure-by-default
标签: java tomcat ssl docker keystore