В 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
https://git.mikael.io/mikaelhg/broken-docker-jdk9-cacerts
Статус (2018-08-07) , ошибка имеетисправлено в Ubuntu Bionic LTS 18.04.1 и Ubuntu Cosmic 18.10.
? Ubuntu 1770553: [SRU] бэкпорт ca-Certificates-Java от космического (20180413ubuntu1)
? Ubuntu 1769013: Пожалуйста, объедините ca-сертификаты-java 20180413 (основной) из Debian нестабильный (основной)
? Ubuntu 1739631: при новой установке с JDK 9 не удается использовать сгенерированный файл хранилища ключей PKCS12 * cacerts
? docker-library 145: образ 9-jdk имеет проблемы с SSL
? Debian 894979: ca-Certificates-java: не работает с OpenJDK 9, сбой приложенийс InvalidAlgorithmParameterException: параметр trustAnchors должен быть непустым
? JDK-8044445: JEP 229: Создать хранилища ключей PKCS12 по умолчанию
? JEP229. Создание хранилищ ключей PKCS12 по умолчанию
Если проблема не устранена после этого обходного пути, возможно, вы захотите убедиться, что вы действительно используете только что исправленный дистрибутив Java.
$ which java
/usr/bin/java
Вы можете установить Javaальтернативы 'auto' с помощью:
$ 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
и создайте его заново, как описано выше.