我是Docker的新手,并试图学习它。我在Windows 7上使用Docker Quickstart终端。 我有一个简单的要求,我在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服务。此Web服务使用HTTPS在远程主机上内部调用其他Web服务。 我有远程主机的证书。
我在互联网上尝试了几种方法,可以将这些证书导入或复制到不同的地点/博客上提到的不同位置,但是徒劳无功。每当我使用HTTPS从test.war调用外部Web服务时,它就会给我SSL握手错误。
我还有一个Java密钥库。我试图在我的Docker文件中使用Java并试图使用密钥库,但是再次,徒劳无功。
当我在直接安装在我的机器上的tomcat上使用相同的test.war时,它的工作非常好。
有人可以通过提供在此方案中导入/使用SSL证书/密钥库的步骤来帮助我。另外,如何导入多个证书?
答案 0 :(得分:8)
您可以尝试将证书导入docker内的jvm trusted store。
我是远程主机的证书。
您可以使用这些证书,但事实上您并不需要它们,您只需要颁发证书的颁发机构的根证书。您可以从互联网上下载。
通常它们以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
此命令询问您是否确实要添加证书,您需要输入"是"。
所有这些都可以转化为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>
答案 1 :(得分:0)
For Java apps in RHEL/Centos images, you can use update-ca-trust
,它将根据您放入/etc/pki/ca-trust
的文件为您更新信任库。它还直接接受.pem
个文件:
FROM ...
USER root
COPY yourcertificate.pem /etc/pki/ca-trust/source/anchors/yourcertificate.pem
RUN update-ca-trust
这将自动为您更新/etc/pki/java/cacerts
,以便Java信任新证书。
或者,如果您的证书托管在Web服务器上,那么您可以使用curl
下载它而不是复制文件 - 例如:
RUN curl -k https://badssl.com/certs/ca-untrusted-root.crt -o /etc/pki/ca-trust/source/anchors/ca-untrusted-root.crt && \
update-ca-trust
答案 2 :(得分:0)
classpath:/some/location/cerkey.jks
来引用Docker实例。file:/some/location/cerkey.jks
。提示:server.ssl.key-store的值