ในUbuntu 18.04ข้อผิดพลาดนี้มีสาเหตุที่แตกต่างกัน (JEP 229 เปลี่ยนจากjks
รูปแบบเริ่มต้นที่เก็บคีย์เป็นpkcs12
รูปแบบและการสร้างไฟล์ Debian cacerts โดยใช้ค่าเริ่มต้นสำหรับไฟล์ใหม่) และวิธีแก้ไข :
# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
# java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.
# 0. First make yourself root with 'sudo bash'.
# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
# Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure
สถานะ (2018-08-07)ข้อผิดพลาดได้รับการแก้ไขใน Ubuntu Bionic LTS 18.04.1 และ Ubuntu Cosmic 18.10
🗹 Ubuntu 1770553: [SRU] backport ca-certificate-java จากจักรวาล (20180413ubuntu1)
🗹 Ubuntu 1769013: โปรดรวม ca-certificate-java 20180413 (หลัก) จาก Debian ไม่เสถียร (หลัก)
🗹 Ubuntu 1739631: ติดตั้งใหม่ด้วย JDK 9 ไม่สามารถใช้ไฟล์ keystore PKCS12 cacerts ที่สร้างขึ้น
🗹 docker -library 145: 9-jdk image มีปัญหา SSL
🗹 Debian 894979: ca-certificate-java: ไม่ทำงานกับ OpenJDK 9 แอปพลิเคชันล้มเหลวด้วย InvalidAlgorithmParameterException: พารามิเตอร์ trustAnchors ต้องไม่ว่างเปล่า
🗹 JDK-8044445: JEP 229: สร้างที่เก็บคีย์ PKCS12 ตามค่าเริ่มต้น
🖺 JEP 229: สร้างที่เก็บคีย์PKCS12 ตามค่าเริ่มต้น
หากปัญหายังคงมีอยู่หลังจากการแก้ไขปัญหานี้คุณอาจต้องการตรวจสอบให้แน่ใจว่าคุณใช้การกระจาย Java จริง ๆ ที่คุณเพิ่งแก้ไข
$ which java
/usr/bin/java
คุณสามารถตั้งค่าทางเลือก Java เป็น 'อัตโนมัติ' ด้วย:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
คุณสามารถตรวจสอบเวอร์ชั่น Java ที่คุณกำลังใช้งานอยู่:
$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)
มีวิธีแก้ปัญหาทางเลือกเช่นกัน แต่สิ่งเหล่านี้มีผลข้างเคียงของตัวเองซึ่งจะต้องมีการบำรุงรักษาในอนาคตเพิ่มเติมโดยไม่ต้องจ่ายผลตอบแทนใด ๆ
วิธีแก้ปัญหาที่ดีที่สุดถัดไปคือการเพิ่มแถว
javax.net.ssl.trustStorePassword=changeit
ไปยังไฟล์
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
สิ่งที่มีอยู่
วิธีแก้ไขปัญหาอย่างน้อยสามคือการเปลี่ยนค่าของ
keystore.type=pkcs12
ถึง
keystore.type=jks
ในไฟล์
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
สิ่งที่มีอยู่แล้วลบcacerts
ไฟล์และสร้างใหม่ในลักษณะที่อธิบายไว้ในแถวสุดท้ายของสคริปต์วิธีแก้ปัญหาที่ด้านบนของโพสต์