Di Ubuntu 18.04 , kesalahan ini memiliki penyebab berbeda (JEP 229, beralih dari jks
format default keystore ke pkcs12
format, dan pembuatan file cacerts Debian menggunakan default untuk file baru) dan solusinya :
# 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
Status (2018-08-07) , bug telah diperbaiki di Ubuntu Bionic LTS 18.04.1 dan Ubuntu Cosmic 18.10.
๐น Ubuntu 1770553: [SRU] backport ca-sertifikat-java dari cosmic (20180413ubuntu1)
๐น Ubuntu 1769013: Silakan gabungkan ca-sertifikat-java 20180413 (utama) dari Debian tidak stabil (utama)
๐น Ubuntu 1739631: Instalasi baru dengan JDK 9 tidak dapat menggunakan file keystore cacerts PKCS12 yang dihasilkan
๐น docker-library 145: Gambar 9-jdk memiliki masalah SSL
๐น Debian 894979: ca-sertifikat-java: tidak bekerja dengan OpenJDK 9, aplikasi gagal dengan InvalidAlgorithmParameterException: parameter trustAnchors harus non-kosong
๐น JDK-8044445: JEP 229: Buat Keystores PKCS12 secara Default
๐บ JEP 229: Buat Keystores PKCS12 secara Default
Jika masalah berlanjut setelah penyelesaian ini, Anda mungkin ingin memastikan bahwa Anda benar-benar menjalankan distribusi Java yang baru saja Anda perbaiki.
$ which java
/usr/bin/java
Anda dapat mengatur alternatif Java ke 'otomatis' dengan:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Anda dapat memeriksa ulang versi Java yang Anda jalankan:
$ 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)
Ada solusi alternatif juga, tetapi mereka memiliki efek samping sendiri yang akan membutuhkan perawatan tambahan di masa depan, tanpa imbalan apa pun.
Solusi terbaik berikutnya adalah menambahkan baris
javax.net.ssl.trustStorePassword=changeit
ke file
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
mana yang ada.
Solusi ketiga yang paling tidak bermasalah adalah mengubah nilai
keystore.type=pkcs12
untuk
keystore.type=jks
dalam file
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
mana saja yang ada, dan kemudian hapus cacerts
file dan buat kembali dengan cara yang dijelaskan pada baris terakhir dari script pemecahan masalah di bagian atas posting.