1 回答
TA贡献1865条经验 获得超7个赞
从 JDK 8 迁移到 JDK 10 时的解决方案
证书真的不一样
JDK 10 有 80 个,而 JDK 8 有 151 个
JDK 10 最近添加了 certs
https://dzone.com/articles/openjdk-10-now-includes-root-ca-certificates
http://openjdk.java.net/jeps/319
JDK 10
root@c339504909345:/opt/jdk-minimal/jre/lib/security # keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 80 entries
JDK 8
root@c39596768075:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts # keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 151 entries
修复步骤
我没有检查哪个证书链不受信任,但服务器的 URL 证书是有效的......cacerts来自 JDK 10 的链截至今天已损坏。我可以断言,因为来自https://download.java.net/java/GA/jdk10/10/binaries/openjdk-10_linux-x64_bin.tar.gz的下载 被安装在一个全新的 Docker 映像中。
我删除了 JDK 10 证书并将其替换为 JDK 8
由于我正在构建 Docker 映像,因此我可以使用多阶段构建快速完成此操作
我正在使用jlinkas构建一个最小的 JRE/opt/jdk/bin/jlink \
--module-path /opt/jdk/jmods...
所以,这是不同的路径和命令的顺序......
# Java 8
COPY --from=marcellodesales-springboot-builder-jdk8 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts /etc/ssl/certs/java/cacerts
# Java 10
RUN rm -f /opt/jdk-minimal/jre/lib/security/cacerts
RUN ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts
添加回答
举报