Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将自签名证书导入Docker';服务无法识别s JRE cacert Docker容器中正在运行Java服务,该容器访问外部HTTPS url,其自签名证书对服务/JRE cacert密钥库不可用,因此连接失败 因此,将HTTPS外部URL的自签名证书导入Docker容器的JRE cacert密钥库。(检查$JAVA_HOME环境变量后) 重新启动Docker容器(使用Docker restart命令),希望服务也能重新启动,并从JRE cacert中选择更改。但这并没有发生,Java服务仍然无法访问外部HTTPS URL_Java_Docker_Https_Docker Compose_Docker Machine - Fatal编程技术网

将自签名证书导入Docker';服务无法识别s JRE cacert Docker容器中正在运行Java服务,该容器访问外部HTTPS url,其自签名证书对服务/JRE cacert密钥库不可用,因此连接失败 因此,将HTTPS外部URL的自签名证书导入Docker容器的JRE cacert密钥库。(检查$JAVA_HOME环境变量后) 重新启动Docker容器(使用Docker restart命令),希望服务也能重新启动,并从JRE cacert中选择更改。但这并没有发生,Java服务仍然无法访问外部HTTPS URL

将自签名证书导入Docker';服务无法识别s JRE cacert Docker容器中正在运行Java服务,该容器访问外部HTTPS url,其自签名证书对服务/JRE cacert密钥库不可用,因此连接失败 因此,将HTTPS外部URL的自签名证书导入Docker容器的JRE cacert密钥库。(检查$JAVA_HOME环境变量后) 重新启动Docker容器(使用Docker restart命令),希望服务也能重新启动,并从JRE cacert中选择更改。但这并没有发生,Java服务仍然无法访问外部HTTPS URL,java,docker,https,docker-compose,docker-machine,Java,Docker,Https,Docker Compose,Docker Machine,知道Docker容器中运行的Java服务如何通过新证书导入选择JRE cacert更改吗 因此,将HTTPS外部URL的自签名证书导入Docker容器的JRE cacert密钥库 否:您需要将其导入到运行容器的Docker映像中 将其导入容器只会创建一个,当您重新启动容器时,将丢弃该文件 比如: 对于使用已经配置好的基于java的容器,如jenkins、sonarqube或nexus(例如,如果您运行自己的构建服务器),我发现使用docker run的参数将合适的cacerts-文件装入这些容器

知道Docker容器中运行的Java服务如何通过新证书导入选择JRE cacert更改吗

因此,将HTTPS外部URL的自签名证书导入Docker容器的JRE cacert密钥库

否:您需要将其导入到运行容器的Docker映像中

将其导入容器只会创建一个,当您重新启动容器时,将丢弃该文件

比如:


对于使用已经配置好的基于java的容器,如jenkins、sonarqube或nexus(例如,如果您运行自己的构建服务器),我发现使用docker run的参数将合适的
cacerts
-文件装入这些容器更方便

我使用openjdk中的
cacerts
文件作为基础:

  • 使用临时容器从openjdk映像中提取
    cacerts
  • 使用临时容器将证书添加到提取的
    cacerts
    ,该临时容器从同样包含
    ldap.cer的文件夹启动:
  • 运行目标docker容器,使用运行参数e装载提取的
    cacerts
    。G对于
    声纳qube
  • 如果有新版本的openjdk,您可以使用1中的命令更新主机上的
    cacerts
    -文件。二,


    为了更新目标映像(例如,
    sonarqube
    ),您不需要使用
    Dockerfile
    docker build
    来创建自己的映像。下面是一个适用于基于OpenJDK Java 11的映像的解决方案

    前面要提到的一点是,您可以使用JDK映像或JRE。第二个选项需要安装
    ca证书java

    • 基于JDK的映像的
      Dockerfile
    • Dockerfile
      对于基于JRE的图像:

    此外,正如您从Dockerfiles上面的说明中所看到的,它们都要求您的
    证书.crt
    文件位于同一个文件夹中。

    您刚才未选择的答案是否缺少任何内容?这太神奇了。在您的图像提供商决定更改Java版本之前,这可能可以正常工作。使用旧的
    cacerts
    文件可能会产生不可预见的后果,包括信任不应再信任的CA。为了避免这种情况,您必须跟踪感兴趣的映像中的Java版本更改,并在发生这种情况时提取新文件。正因为如此,它变得不再那么方便了。有了新的java版本,您只需更新docker主机上的cacerts文件,甚至不必替换映像或容器。那么所使用的证书甚至可能比图像中提供的证书更新。@VolkerSeibt如果我在docker图像中有一个我需要的自签名证书,这是否有效?如果我在Dockerfile中提到证书并运行keypass,它就可以正常工作。但是,我想要一个解决方案,这样我就不需要修改图像。我想在运行我的容器时提到证书。@Anthony最新的命令旨在运行您的目标容器,然后使用docker主机上保存的cacerts文件。不需要修改图像。太棒了!我曾在DEBIAN上运行的docker上使用DER加密证书进行过尝试,效果非常好。我认为这是最好的解决方案,只需将证书导出为base-64编码的X.509,以避免复制二进制文件的麻烦file@Dojo我想我的意思是在停止并移除旧容器后重新启动一个新容器。@Archmede我没有:你可以考虑把这个当作一个单独的问题。这么多的搜索和这个单一的命令是所有的,这是我的证书似乎有错误的日期,当我尝试使用它在码头工人文件。你遇到过这个问题吗?@Archmede这是什么意思?日期不对?。不,我没有。@povisenki我的应用程序抛出一个错误,指出我的证书在5天前过期,即使它将在5天后过期years@Archmede我可以建议您创建一个问题,以便您可以提供有关您使用的证书和代码的公共信息
    USER root
    COPY ldap.cer $JAVA_HOME/jre/lib/security
    RUN \
        cd $JAVA_HOME/jre/lib/security \
        && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias ldapcert -file ldap.cer
    
    docker pull openjdk:latest
    docker run --rm --entrypoint cat openjdk:latest /etc/ssl/certs/java/cacerts > cacerts
    
    docker run --rm -v `pwd`:/tmp/certs openjdk:latest bash -c 'cd /tmp/certs && keytool -keystore cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias buenting-root -file ldap.cer'
    
    docker run ... -v /path/to/your/prepared/cacerts:/etc/ssl/certs/java/cacerts:ro ... sonarqube:lts
    
    FROM openjdk:11-jdk-slim
    WORKDIR /opt/workdir/
    
    #.crt file in the same folder as your Dockerfile
    ARG CERT="certificate.crt"
    
    #import cert into java
    COPY $CERT /opt/workdir/
    RUN keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt
    
    ...
    
    FROM openjdk:11-jre-slim
    WORKDIR /opt/workdir/
    
    #.crt file in the same folder as your Dockerfile
    ARG CERT="certificate.crt"
    
    #installing ca-certificates-java and then import cert into java
    COPY $CERT /opt/workdir/
    RUN mkdir -p /usr/share/man/man1 \
        && apt-get update \
        && apt-get install -y ca-certificates-java \
        && keytool -importcert -file $CERT -alias $CERT -cacerts -storepass changeit -noprompt
    
    ...