already exists" even using "keytool - delete"-6ren"> already exists" even using "keytool - delete"-我用 Dockerfile为我们的 Web 应用程序创建图像,这需要 HTTPS .但是,我收到 Certificate not imported, alias already exists Jav-6ren">
gpt4 book ai didi

Dockerfile key 工具 : getting "Certificate alias already exists" even using "keytool - delete"

转载 作者:行者123 更新时间:2023-12-02 19:20:29 24 4
gpt4 key购买 nike

我用 Dockerfile为我们的 Web 应用程序创建图像,这需要 HTTPS .但是,我收到 Certificate not imported, alias <my-cert-name> already exists Java 异常。当我尝试不使用 Dockerfile 时,仅从命令行,我就可以删除现有别名和 export , 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 .

环境:
 Using Docker desktop on windows 10. 

提前致谢!

最佳答案

我更喜欢这样的符号:

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

仔细检查您正在导入的名称与您删除的名称相同会​​更容易。
(因为 -deletegood way to force update an existing certificate )

但要点是:
  • 您在 my-cert-name.jks 中删除, 而你导入 trustStore.jks .
  • 如果导入失败,则意味着 trustStore.jks已经有该名称的证书

  • 如果该证书已经在复制的 keystore 中,我不会导出/重新导入它。 (我只在 my previous answer 中导入了它)

    确保“ usr/app/ssl/certs”是正确的路径:我宁愿使用绝对路径,而不是相对路径。

    OP fongfong确认 in the comments :

    I should delete the existing alias from trustStore.jks, not my-cert-name.jks

    关于Dockerfile key 工具 : getting "Certificate alias <name> already exists" even using "keytool - delete",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253847/

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