В 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-certificates-java от cosmic (20180413ubuntu1)
???? Ubuntu 1769013: Моля, обединете ca-certificates-java 20180413 ( main) от Debian нестабилен (main)
???? 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 хранилища за ключове по подразбиране
???? JEP 229: Създайте хранилища за ключове PKCS12 по подразбиране
Ако проблемът продължава след това заобиколно решение, може да искате да се уверите, че действително изпълнявате дистрибуцията на Java, която току-що коригирахте.
$ which java
/usr/bin/java
Можете да зададете алтернативите на Java на „автоматично“ с:
$ 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
to
keystore.type=jks
във файловете
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
което и да съществува, и след това премахнете файла cacerts
и го генерирайте отново по начина, описан в последния ред на скрипта за заобиколно решение в горната част на публикацията.
person
Mikael Gueck
schedule
30.04.2018