the trustAnchors parameter must be non-empty

При использовании распакованной версии OpenJDK 8, столкнулся с проблемой, что любое обращение к HTTPS обращается ошибками вида:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Гугление предлагает в основном только однотипные решения: переустановить ca-certificates-java или “колдунства” вокруг команды update-ca-certificates. Однако проблема и её решение на деле оказались очень банальными.

Причины

Дело в том, что в распакованной версии OpenJDK 8 контейнер сертификатов openjdk-8/jre/lib/security/cacerts просто пуст:

keytool -v -list -keystore openjdk-8/jre/lib/security/cacerts -storepass changeit
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 0 entries

А вот в распакованной версии OpenJDK 11 (например) с этим всё в порядке:

keytool -v -list -keystore openjdk-11/lib/security/cacerts -storepass changeit
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 92 entries
. . .

Решение

При запуске java-приложения нужно добавить параметр javax.net.ssl.trustStore, который будет указывать на cacerts с актуальными сертификатами:

/opt/openjdk-8/bin/java -Djavax.net.ssl.trustStore=/opt/openjdk-11/lib/security/cacerts -jar someApp.jar