У 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-сертифікати-java від космічного (20180413ubuntu1)
🗹 Ubuntu 1769013: Об’єднайте ca-сертифікати-java 20180413 (головний) з Debian нестабільним (основним)
🗹 Ubuntu 1739631: свіжа установка з JDK 9 не може використовувати згенерований файл зберігання ключів PKCS12
🗹 -library 145: 9-jdk-зображення має проблеми з SSL
🗹 Debian 894979: ca-сертифікати-java: не працює з OpenJDK 9, програми виходять з ладу з InvalidAlgorithmParameterException: параметр trustAnchors повинен бути не порожнім
🗹 JDK-8044445: JEP 229: Створення клавіатур PKCS12 за замовчуванням
🖺 JEP 229: Створення клавіатур 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
файл і відновіть його таким чином, як описано в останньому рядку обхідного сценарію вгорі публікації.