En Ubuntu 18.04 , este error tiene una causa diferente (JEP 229, cambia del jks
formato predeterminado del almacén de claves al pkcs12
formato y la generación de archivos Cacerts de Debian usa el predeterminado para los archivos nuevos) y solución alternativa :
# 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
Estado (2018-08-07) , el error se ha corregido en Ubuntu Bionic LTS 18.04.1 y Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-certificados-java de cosmic (20180413ubuntu1)
🗹 Ubuntu 1769013: Combine ca-certificados-java 20180413 (principal) de Debian inestable (principal)
🗹 Ubuntu 1739631: la instalación nueva con JDK 9 no puede usar el archivo de almacén de claves generado por PKCS12 generado
🗹 docker-library 145: la imagen 9-jdk tiene problemas de SSL
🗹 Debian 894979: ca-certificados-java: no funciona con OpenJDK 9, las aplicaciones fallan con InvalidAlgorithmParameterException: el parámetro trustAnchors no debe estar vacío
D JDK-8044445: JEP 229: Crear almacenes de claves PKCS12 de forma predeterminada
EP JEP 229: Crear almacenes de claves PKCS12 por defecto
Si el problema continúa después de esta solución alternativa, es posible que desee asegurarse de que realmente está ejecutando la distribución de Java que acaba de solucionar.
$ which java
/usr/bin/java
Puede configurar las alternativas de Java a 'auto' con:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Puede verificar la versión de Java que está ejecutando:
$ 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)
También existen soluciones alternativas, pero tienen sus propios efectos secundarios que requerirán un mantenimiento adicional futuro, sin ningún beneficio.
La siguiente mejor solución es agregar la fila
javax.net.ssl.trustStorePassword=changeit
a los archivos
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
lo que exista
La tercera solución alternativa menos problemática es cambiar el valor de
keystore.type=pkcs12
a
keystore.type=jks
en los archivos
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
lo que exista, y luego elimine el cacerts
archivo y vuelva a generarlo de la manera descrita en la última fila del script de solución alternativa en la parte superior de la publicación.