In Ubuntu 18.04 , questo errore ha una causa diversa (JEP 229, passa dal jks
formato predefinito del keystore al pkcs12
formato e la generazione di file Debian cacerts usando l'impostazione predefinita per i nuovi file) e soluzioni alternative :
# 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
Stato (07-08-2018) , il bug è stato corretto in Ubuntu Bionic LTS 18.04.1 e Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-certificati-java da cosmic (20180413ubuntu1)
🗹 Ubuntu 1769013: Unire ca-certificati-java 20180413 (principale) da Debian unstable (principale)
🗹 Ubuntu 1739631: una nuova installazione con JDK 9 non può utilizzare il file di archivio chiavi cKert PKCS12 generato
🗹 docker -library 145: l'immagine 9-jdk presenta problemi SSL
🗹 Debian 894979: ca-certificati-java: non funziona con OpenJDK 9, le applicazioni non funzionano con InvalidAlgorithmParameterException: il parametro trustAnchors deve essere non vuoto
🗹 JDK-8044445: JEP 229: creazione di keystore PKCS12 per impostazione predefinita
🖺 JEP 229: creazione di PKCS12 per impostazione predefinita
Se il problema persiste dopo questa soluzione alternativa, è possibile assicurarsi di eseguire effettivamente la distribuzione Java appena risolta.
$ which java
/usr/bin/java
È possibile impostare le alternative Java su "auto" con:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Puoi ricontrollare la versione Java che stai eseguendo:
$ 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)
Esistono anche soluzioni alternative, ma quelle hanno i loro effetti collaterali che richiedono una manutenzione futura extra, senza alcun vantaggio.
La soluzione migliore successiva è aggiungere la riga
javax.net.ssl.trustStorePassword=changeit
ai file
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
qualunque esista.
La terza soluzione meno problematica consiste nel modificare il valore di
keystore.type=pkcs12
per
keystore.type=jks
nei file
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
a seconda di quale esiste, quindi rimuovere il cacerts
file e rigenerarlo nel modo descritto nell'ultima riga dello script di soluzione alternativa nella parte superiore del post.