Gag*_*ngh 8 java ssl tomcat keystore docker
我是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
Run Code Online (Sandbox Code Playgroud)
然后我在Docker控制台中发出简单的构建和运行命令.
test.war是一个Java Web服务.此Web服务使用HTTPS在远程主机上内部调用其他Web服务.我有远程主机的证书.
我在互联网上尝试了几种方法,可以将这些证书导入或复制到不同的论坛/博客上提到的不同位置,但是徒劳无功.每当我使用HTTPS从test.war调用外部Web服务时,它就会给我SSL握手错误.
我也有一个Java密钥库.我试图在我的Docker文件中使用Java并尝试使用密钥库,但是再次,徒劳无功.
当我在直接安装在我的机器上的tomcat上使用相同的test.war时,它工作得非常好.
有人可以通过提供在此方案中导入/使用SSL证书/密钥库的步骤来帮助我.另外,如何导入多个证书?
Sas*_*ota 12
您可以尝试将证书导入docker内的jvm trusted store.
我有远程主机的证书.
您可以使用这些证书但实际上您不需要它们,您只需要颁发证书的颁发机构的根证书.您可以从互联网上下载.
通常它们是以pem格式给出的,但你需要derjvm.
首先,您需要转换证书:
openssl x509 -in ca.pem -inform pem -out ca.der -outform der
Run Code Online (Sandbox Code Playgroud)
然后将其安装到jvm密钥库中:
keytool -importcert -alias startssl -keystore \
$JAVA_HOME/lib/security/cacerts -storepass changeit -file ca.der
Run Code Online (Sandbox Code Playgroud)
此命令询问您是否确实要添加证书,请输入"是".
它们可以一起变成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
Run Code Online (Sandbox Code Playgroud)
注意:如果您已经拥有der格式的证书,则不需要openssl呼叫,只需直接复制证书即可.
要验证证书是否真正应用,您可以运行容器ssh到其中
$ docker exec -it <CONTAINER-ID> bash
Run Code Online (Sandbox Code Playgroud)
并检查密钥库:
$ keytool -keystore "/docker-java-home/jre/lib/security/cacerts" -storepass changeit -list | grep <NAME-OF-YOUR-CERT-AUTHORITY>
Run Code Online (Sandbox Code Playgroud)
小智 5
对于 RHEL/Centos 映像中的 Java 应用程序,您可以使用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
Run Code Online (Sandbox Code Playgroud)
这将/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15627 次 |
| 最近记录: |