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