java - JDK 10 模块和 sun.security.provider.certpath.SunCertPathBuilderException

标签 java docker java-module java-10

我曾经在 openjdk:10-slim docker 镜像上运行我的应用程序,一切正常。

然后我使用以下 dockerfile 迁移到使用 Jlink 构建的自定义 JDK:

FROM openjdk:10-jdk-slim AS jdkBuilder

RUN $JAVA_HOME/bin/jlink \
--module-path /opt/jdk/jmods \
--verbose \
--add-modules java.base,java.logging,java.xml,java.xml.bind,java.sql,jdk.unsupported,java.naming,java.desktop,java.management,java.security.jgss,java.security.sasl,jdk.crypto.cryptoki,jdk.crypto.ec,java.instrument,jdk.management.agent \
--output /opt/jdk-minimal \
--compress 2 \
--no-header-files


FROM debian:9-slim
COPY --from=jdkBuilder /opt/jdk-minimal /opt/jdk-minimal

ENV JAVA_HOME=/opt/jdk-minimal
COPY target/*.jar /opt/

CMD $JAVA_HOME/bin/java $JAVA_OPTS -jar /opt/*.jar

当我使用 AWS S3 SDK 时,这大部分工作正常,在这种情况下我得到以下异常:

com.amazonaws.SdkClientException: Unable to execute HTTP request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我猜这些证书(或访问它们的方式)是由一个我没有包含的缺失包提供的。

我进行了一些挖掘,但找不到任何相关信息。我尝试添加任何可能与安全或 SSL 相关的模块,但我没有运气。

有没有人遇到过这个问题,知道需要添加哪个模块? 作为解决方法,我恢复到 openjdk:10-slim 但我想使用 jlink 因为它会使我的图像变小

最佳答案

异常表明您的环境缺少一些根证书。

尝试将 cacertsopenjdk:10-slim 复制到您正在使用的 JDK。

关于java - JDK 10 模块和 sun.security.provider.certpath.SunCertPathBuilderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792598/

相关文章:

docker - 当kubernetes重启容器或者集群扩容时会发生什么?

docker - ` docker attach `附加到哪个进程?

java - 如何从 Java 9 中的另一个模块添加到 JavaFX Scene 样式表?

java - 仅通过 XML(无需其他可绘制对象)单击时如何更改按钮的颜色?

部署概念 : Packaging JAR Dependencies, 时间和原因

java - 泛型类型参数和方法调用

shell - 如何进入InfluxDB shell?

java - 为什么java.se模块没有加载?

java - JRE 9 模块需要一个未找到的模块

java - Android Volley 抽象 onResponse