Dockerfile键工具:获取;证书别名<;名称>;“已经存在”;甚至使用;keytool-删除";
我使用Dockerfile键工具:获取;证书别名<;名称>;“已经存在”;甚至使用;keytool-删除";,docker,https,keytool,Docker,Https,Keytool,我使用Dockerfile为需要HTTPS的web应用程序创建图像。但是,我正在获取未导入的证书,别名已存在Java异常。当我尝试不使用Dockerfile时,仅在命令行中,我就可以删除现有别名并导出,import。但不能使用Dockerfile。有什么想法吗?谢谢 Dockerfile: FROM openjdk:8-alpine #Starting https and certs configuration #Make directory for certs inside th
Dockerfile
为需要HTTPS
的web应用程序创建图像。但是,我正在获取未导入的证书,别名已存在Java异常。当我尝试不使用Dockerfile
时,仅在命令行中,我就可以删除现有别名并导出,import
。但不能使用Dockerfile
。有什么想法吗?谢谢
Dockerfile:
FROM openjdk:8-alpine
#Starting https and certs configuration
#Make directory for certs inside the container
RUN mkdir -p usr/app/ssl/certs/
#Copy certs from local to the container
COPY myWebApp/src/main/resources/PT/certificates/my-cert-name.jks usr/app/ssl/certs/
COPY myWebApp/src/main/resources/PT/certificates/trustStore.jks usr/app/ssl/certs/
#Export/Import certificate
RUN cd usr/app/ssl/certs/ && \
keytool -delete -alias my-cert-name -keystore my-cert-name.jks -storepass password123! && \
keytool -export -alias my-cert-name -keystore my-cert-name.jks -file my-cert-name.crt -storepass password123! && \
keytool -importcert -keystore trustStore.jks -alias my-cert-name -storepass password123! -file my-cert-name.crt -noprompt
#Ending https and certs configuration
RUN mkdir -p /usr/app/myweb
COPY myWebApp/target/myWeb.war /usr/app/myweb
CMD java -Xms512M -Xmx6144M -XX:MaxMetaspaceSize=3072M -jar /usr/app/myweb/myWeb.war
EXPOSE 8080
Docker构建命令
>docker build -it test-https-image .
环境:
提前谢谢 我更喜欢符号:
RUN cd usr/app/ssl/certs/ && \
keytool -delete -alias my-cert-name -keystore my-cert-name.jks -storepass password123! && \
keytool -export -alias my-cert-name -keystore my-cert-namet.jks \
-file my-cert-name.crt -storepass password123! && \
keytool -importcert -keystore trustStore.jks -alias my-cert-name -storepass password123! \
-file my-cert-name.crt -noprompt
如果您正在导入与已删除的名称相同的名称,则更容易进行双重检查。
(因为-delete
是a)
但要点是:
- 您可以在
my cert name.jks
中删除,而在trustStore.jks
中导入李>
- 如果导入失败,这意味着
trustStore.jks
已经拥有该名称的证书
如果该证书已在复制的密钥库中,我将不会导出/重新导入它。(我只在中国进口)
确保“usr/app/ssl/certs
”是正确的路径:我宁愿使用绝对路径,而不是相对路径
委员会确认:
我应该从trustStore.jks
中删除现有别名,而不是我的证书名.jks
基本图像是什么?(你的Dockerfile的第一行:FROM行)嗨,我添加了Dockerfile。希望你现在能看到。谢谢谢谢你,沃克!我用你建议的符号更新了我的问题。当你说“我不会导出/重新导入它(我在上一个回答中只导入了它)”时。你能再解释一下吗?如何检查别名是否已存在?如果它在那里,如果我想用一个新的但有相同别名的更新它怎么办?谢谢@丰丰“我在之前的回答中只导入了它”:那么为什么我会看到“keytool-export”?这不是一个导出吗?根据我收到的指令,它首先执行-export
,然后执行-importcert
。让我找出原因。另一个问题,我看到人们将证书复制到$JAVA\u HOME/jre/lib/security
然后进行导入,证书(.jks)是否必须是$JAVA\u HOME/jre/lib/security
?不,是吗?我能够在myWebApp/src/main/resources/PT/certificates/
目录下本地运行这些命令,我的java是jdk1.8。有什么想法吗?谢谢@如果您想让任何java进程知道您的证书,那么是的,您需要修改$JAVA_HOME/jre/lib/security/cacerts
密钥库文件。因此,我需要执行此操作#将证书从本地复制到容器复制myWebApp/src/main/resources/PT/certificates/my-cert-name.jks/etc/ssl/certs/JAVA/cacerts复制myWebApp/src/main/resources/PT/certificates/trustStore.jks/etc/ssl/certs/java/cacerts
是否改用/etc/ssl/certs/java/cacerts
目录?谢谢
RUN cd usr/app/ssl/certs/ && \
keytool -delete -alias my-cert-name -keystore my-cert-name.jks -storepass password123! && \
keytool -export -alias my-cert-name -keystore my-cert-namet.jks \
-file my-cert-name.crt -storepass password123! && \
keytool -importcert -keystore trustStore.jks -alias my-cert-name -storepass password123! \
-file my-cert-name.crt -noprompt