No Ubuntu 18.04 , esse erro tem uma causa diferente (JEP 229, alterne do jks
formato padrão de keystore para o pkcs12
formato e a geração de arquivos cacerts do Debian usando o padrão para novos arquivos) e solução 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
Status (07/08/2018) , o bug foi corrigido no Ubuntu Bionic LTS 18.04.1 e Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: back-end [SRU] ca-certificates-java da cosmic (20180413ubuntu1)
176 Ubuntu 1769013: Por favor, mescle ca-certificate-java 20180413 (main) do Debian unstable (main)
🗹 Ubuntu 1739631: A nova instalação com o JDK 9 não pode usar o arquivo de armazenamento de chaves cacerts PKCS12 gerado
🗹 Imagem do docker-library 145: 9-jdk tem problemas de SSL
🗹 Debian 894979: ca-certificates-java: não funciona com o OpenJDK 9, os aplicativos falham com InvalidAlgorithmParameterException: o parâmetro trustAnchors deve estar vazio
🗹 JDK-8044445: JEP 229: criar keystores PKCS12 por padrão
🖺 JEP 229: criar PKCS12 por padrão
Se o problema persistir após esta solução alternativa, convém verificar se você está realmente executando a distribuição Java que acabou de corrigir.
$ which java
/usr/bin/java
Você pode definir as alternativas Java para 'auto' com:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Você pode verificar novamente a versão Java que está executando:
$ 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)
Também existem soluções alternativas, mas elas têm seus próprios efeitos colaterais, que exigirão manutenção futura extra, sem nenhum retorno.
A próxima melhor solução alternativa é adicionar a linha
javax.net.ssl.trustStorePassword=changeit
para os arquivos
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
o que existir.
A terceira solução menos problemática é alterar o valor de
keystore.type=pkcs12
para
keystore.type=jks
nos arquivos
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
o que existir, remova o cacerts
arquivo e gere-o novamente da maneira descrita na última linha do script de solução alternativa na parte superior da postagem.