Ошибка - параметр trustAnchors должен быть не пустым - PullRequest
431 голосов
/ 22 июля 2011

Я пытаюсь настроить свою электронную почту на Jenkins / Hudson, и я постоянно получаю сообщение об ошибке:

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

Я видел много информации в Интернете об ошибке, но яне получил никого на работу.Я использую JDK от Sun в Fedora Linux (не OpenJDK).

Вот несколько вещей, которые я пробовал.Я попытался последовать совету из этого поста , но копирование кодеров из Windows на мою коробку Fedora с хостингом Jenkins не сработало.Я попытался выполнить это руководство , поскольку я пытаюсь настроить Gmail в качестве SMTP-сервера, но он также не работает.Я также попытался загрузить и переместить эти файлы cacert вручную и переместить их в мою папку Java, используя различные команды в этом руководстве .

Я открыт для любых предложений, поскольку я 'Я сейчас застрял.Я получил его на работу с сервера Windows Hudson, но я борюсь с Linux.

Ответы [ 35 ]

457 голосов
/ 22 июля 2011

Это странное сообщение означает, что указанное вами хранилище доверенных сертификатов было:

  • пусто,
  • не найдено или
  • не удалось открыть (из-за доступанапример, права доступа).

См. также ответ @ AdamPlumb ниже .

245 голосов
/ 30 апреля 2018

В 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 и создайте его заново, как описано выше.

100 голосов
/ 08 июня 2015

Это исправило проблему для меня в Ubuntu:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

(найдено здесь: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760)

ca-certificates-java не является зависимостью в Oracle JDK / JRE, поэтому это должнобыть явно установленным.

63 голосов
/ 04 июня 2018

В Ubuntu 18.04 основной причиной является конфликт между openjdk-11-jdk (по умолчанию) и другими пакетами в зависимости от него. Это уже исправлено в Debian и скоро будет включено в Ubuntu. Между тем самый простой обходной путь - понизить Java до версии 8. Другие решения, использующие ca-certificates-java, намного сложнее.

Сначала удалите конфликтующие пакеты:

sudo apt-get remove --purge openjdk* java-common default-jdk
sudo apt-get autoremove --purge

Проверьте, успешно ли вы удалили все связанные пакеты:

sudo update-alternatives --config java

Система запросит у вас , что Java не доступен для настройки , в противном случае этот обходной путь завершится неудачно .

Затем переустановите необходимые пакеты:

sudo apt-get install openjdk-8-jdk
53 голосов
/ 07 августа 2014

EJP в основном ответил на вопрос (и я понимаю, что у него есть принятый ответ), но я только что имел дело с этой ошибкой и хотел увековечить свое решение.

У меня возникла ошибка InvalidAlgorithmParameterException на сервере Jira , который я ранее настроил для доступа только по SSL. Проблема заключалась в том, что я настроил хранилище ключей в формате PKCS # 12, но хранилище доверенных сертификатов было в формате JKS.

В моем случае я отредактировал мой файл server.xml, чтобы указать keystoreType для PKCS, но я не указал truststoreType, поэтому по умолчанию используется значение keystoreType. Явно указал truststoreType, как JKS решил это для меня.

52 голосов
/ 06 июня 2012

Я столкнулся с этим решением из поста в блоге Исправление проблемы trustAnchors при запуске OpenJDK 7 в OS X :

Исправление проблемы trustAnchors при запуске OpenJDK 7 в OS X. Если вы используете OpenJDK 7 в OS X и видите это исключение:

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

Есть простое исправление. Просто создайте ссылку в том же файле Cacerts, который использует Apple JDK 1.6:

cd $(/usr/libexec/java_home -v 1.7)/jre/lib/security
ln -fsh /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts

Это необходимо сделать для каждой установленной вами версии OpenJDK. Просто измените -v 1.7 на версию, которую вы хотите исправить. Запустите /usr/libexec/java_home -V, чтобы увидеть все установленные вами JRE и JDK.

Возможно, ребята из OpenJDK могли бы добавить это в свои сценарии установки.

41 голосов
/ 14 марта 2013

В Ubuntu 12.10 (Quantal Quetzal) или более поздних версиях сертификаты хранятся в пакете ca-сертификаты-java . Использование -Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts подберет их независимо от того, какой JDK вы используете.

34 голосов
/ 30 октября 2013

Я столкнулся с этой проблемой на OS X, используя JDK 1.7, после обновления до OS X v10.9 (Mavericks). Исправление, которое работало для меня, состояло в том, чтобы просто переустановить версию Java для Apple, доступную по адресу http://support.apple.com/kb/DL1572.

27 голосов
/ 24 октября 2015

Я бегал

sudo update-ca-certificates -f

для создания файла сертификата, а затем:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

Я вернулся в бизнес, спасибо, ребята. Жаль, что он не включен в установку, но я попал туда в итоге.

14 голосов
/ 30 марта 2016

Ошибка говорит о том, что система не может найти склад доверенных сертификатов по пути, указанному в параметре javax.net.ssl.trustStore.

В Windows я скопировал файл cacerts из jre/lib/security в каталог установки Eclipse (в том же месте, что и файл eclipse.ini) и добавил следующие параметры в eclipse.ini:

-Djavax.net.ssl.trustStore=cacerts
-Djavax.net.ssl.trustStorePassword=changeit
-Djavax.net.ssl.trustStoreType=JKS

У меня были некоторые проблемы с путем к cacerts (переменная окружения% java_home% каким-то образом перезаписана), поэтому я использовал это тривиальное решение.

Идея состоит в том, чтобы предоставить действительный путь к файлу склада доверенных сертификатов - в идеале это будет относительный путь. Вы также можете использовать абсолютный путь.

Чтобы убедиться, что тип хранилища - JKS, вы должны выполнить следующую команду:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...