Я пытаюсь настроить свою электронную почту на Jenkins / Hudson, и я постоянно получаю сообщение об ошибке:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
Я видел много информации в Интернете об ошибке, но я не получил никакой работы. Я использую Sun JDK в Fedora Linux (не OpenJDK).
Вот несколько вещей, которые я попробовал. Я попытался последовать совету из этого поста , но копирование cacerts из Windows на мой ящик Fedora с хостингом Jenkins не сработало. Я попытался следовать этому руководству, поскольку я пытаюсь настроить Gmail в качестве SMTP-сервера, но он тоже не работает. Я также попытался загрузить и переместить эти файлы cacert вручную и переместить их в свою папку Java, используя различные команды в этом руководстве .
Я открыт для любых предложений, так как сейчас я застрял. Я получил его на работу с сервера Windows Hudson, но я борюсь с Linux.
${CATALINA_HOME}\conf
ноCATALINA_HOME
он не был установлен, поэтому Tomcat искал\conf
хранилище доверенных сертификатов.В Ubuntu 18.04 эта ошибка имеет другую причину (JEP 229, переключение с
jks
формата хранилища ключей по умолчанию наpkcs12
формат и создание файла Debian cacerts с использованием значения по умолчанию для новых файлов) и обходной путь :Статус (2018-08-07) , ошибка была исправлена в Ubuntu Bionic LTS 18.04.1 и Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-Certificates-Java из космического пространства (20180413ubuntu1)
🗹 Ubuntu 1769013: пожалуйста, объедините ca-certificate-java 20180413 (main) с нестабильным Debian (main)
🗹 Ubuntu 1739631: новая установка с JDK 9 не может использовать созданный файл хранилища ключей PKCS12 cacerts.
Cker docker-library 145: образ 9-jdk имеет проблемы с SSL
🗹 Debian 894979: ca-сертификаты-java: не работает с OpenJDK 9, сбой приложений с InvalidAlgorithmParameterException: параметр trustAnchors должен быть непустым
🗹 JDK-8044445: JEP 229: создание хранилищ ключей PKCS12 по умолчанию
🖺 JEP 229: создание хранилищ ключей PKCS12 по умолчанию
Если проблема не устранена после этого обходного пути, возможно, вы захотите убедиться, что на самом деле вы используете только что исправленный дистрибутив Java.
Вы можете установить альтернативы Java на 'auto' с помощью:
Вы можете дважды проверить версию Java, которую вы выполняете:
Существуют и альтернативные обходные пути, но у них есть свои побочные эффекты, которые потребуют дополнительного технического обслуживания в будущем, без какой-либо отдачи.
Следующий лучший обходной путь - добавить строку
к файлам
что бы ни было.
Третий наименее проблемный обходной путь заключается в изменении значения
в
в файлах
в зависимости от того, что существует, а затем удалите
cacerts
файл и создайте его заново, как описано в последней строке сценария обхода в верхней части сообщения.источник
Это исправило проблему для меня в Ubuntu:
(находится здесь: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760 )
ca-certificates-java
не является зависимостью в Oracle JDK / JRE, поэтому она должна быть явно установлена.источник
В Ubuntu 18.04 основной причиной является конфликт между openjdk-11-jdk (по умолчанию) и другими пакетами в зависимости от него. Это уже исправлено в Debian и скоро будет включено в Ubuntu. Между тем самый простой обходной путь - понизить ваш Java до версии 8. Другие решения, использующие
ca-certificates-java
намного сложнее.Сначала удалите конфликтующие пакеты:
Проверьте, успешно ли вы удалили все связанные пакеты:
Система сообщит вам, что нет Java, доступного для конфигурации , в противном случае этот обходной путь завершится неудачно .
Затем переустановите необходимые пакеты:
источник
openjdk-8-jdk
пакет, удалить/etc/ssl/certs/java/cacerts
файл и запустить,sudo update-ca-certificates -f
что является окольным способом переключения сpkcs12
отформатированного файла Cacerts наjks
отформатированный, как описано в другом месте в этой теме.EJP в основном ответил на вопрос (и я понимаю, что у него есть принятый ответ), но я только что имел дело с этим крайним случаем и хотел увековечить свое решение.
У меня была
InvalidAlgorithmParameterException
ошибка на хосте Jira сервере который я ранее настроил для доступа только по SSL. Проблема заключалась в том, что я настроил хранилище ключей в формате PKCS # 12, но хранилище доверенных сертификатов было в формате JKS.В моем случае я отредактировал свой
server.xml
файл, чтобы указать keystoreType для PKCS, но я не указал truststoreType, поэтому по умолчанию используется значение keystoreType. Указав truststoreType явно, JKS решил это за меня.источник
Я столкнулся с этим решением из поста в блоге. Исправление проблемы trustAnchors при запуске OpenJDK 7 в OS X :
Исправление проблемы trustAnchors при запуске OpenJDK 7 в OS X. Если вы используете OpenJDK 7 в OS X и видели это исключение:
Есть простое решение. Просто вставьте ссылку в тот же файл Cacerts, который использует Apple JDK 1.6:
Это нужно делать для каждой установленной вами версии OpenJDK. Просто измените
-v 1.7
на версию, которую вы хотите исправить. Запустите,/usr/libexec/java_home -V
чтобы увидеть все JRE и JDK, которые вы установили.Возможно, ребята из OpenJDK могли бы добавить это в свои сценарии установки.
источник
security
папке (blacklisted.certs
,local_policy.jar
иUS_export_policy.jar
) для Java , чтобы быть счастливыми.cacerts
подjre
каталогом?В Ubuntu 12.10 (Quantal Quetzal) или более поздних версиях сертификаты хранятся в пакете ca-certificate-java . Использование
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
подберет их независимо от того, какой JDK вы используете.источник
update-ca-certificates -f
вручную, чтобы заполнить файл cacertsЯ столкнулся с этой проблемой на OS X, используя JDK 1.7, после обновления до OS X v10.9 (Mavericks). Исправление, которое работало для меня, состояло в том, чтобы просто переустановить версию Java для Apple, доступную по адресу http://support.apple.com/kb/DL1572 .
источник
Я побежал
создать файл сертификата, а затем:
Я вернулся в бизнес, спасибо, ребята. Жаль, что он не включен в установку, но я попал туда в итоге.
источник
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**
я получаюsudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
sudo update-ca-certificates -f
на Debian jessie withopenjdk-8-jre-headless
из jessie-backports, еслиca-certificates-java
он установлен. Я думаю, порядок установки имеет значение (JRE послеca-certificates-java
может вызвать это, так как последний не имеет никаких триггеров для бэкпортируемой Java 8).sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
без звезд **update-ca-certificates -f
это то, что исправило это. Мне не нужно было 2-й командыОшибка говорит о том, что система не может найти склад доверенных сертификатов по пути, указанному в параметре
javax.net.ssl.trustStore
.В Windows я скопировал
cacerts
файлjre/lib/security
в каталог установки Eclipse (там же, где иeclipse.ini
файл) и добавил следующие параметры вeclipse.ini
:У меня были некоторые проблемы с путем к cacerts (переменная окружения% java_home% как-то перезаписана), поэтому я использовал это тривиальное решение.
Идея состоит в том, чтобы предоставить действительный путь к файлу склада доверенных сертификатов - в идеале это будет относительный путь. Вы также можете использовать абсолютный путь.
Чтобы убедиться, что тип хранилища - JKS, вы должны выполнить следующую команду:
источник
Удаление пакета ca-certificate-java и его установка снова работали для меня ( Ubuntu MATE 17.10 (Artful Aardvark)).
Спасибо, jdstrand: Комментарий 1 к ошибке 983302, Re: ca-certificate-java не может установить Java cacerts на Oneiric Ocelot .
источник
У меня было много проблем с безопасностью после обновления до OS X v10.9 (Mavericks):
trustAnchors
параметр должен быть не пустымЯ применил это обновление Java, и оно исправило все мои проблемы: http://support.apple.com/kb/DL1572?viewlocale=en_US
источник
Я ожидал таких вещей, потому что я использую альтернативную JVM в моей Talend Open Studio (поддержка в настоящее время существует только до JDK 1.7). Я использую 8 в целях безопасности ... в любом случае
Обновите хранилище сертификатов:
тогда
добавить новое значение в ваши параметры инициализации
Для меня вторая запись сработала. Я думаю, что в зависимости от версии Talend Open Studio / TEnt + JVM, он имеет другое имя параметра, но ищет тот же файл хранилища ключей.
источник
javax.net.ssl.trustAnchors
? Это не упомянуто в документации JSSE.Для меня это было вызвано отсутствием trustCertEntry в хранилище доверенных сертификатов.
Чтобы проверить, используйте:
Это дает мне:
Хотя мой PrivateKeyEntry содержит CA, его необходимо было импортировать отдельно :
Он импортирует сертификат, а затем повторный запуск
keytool -list -keystore keystore.jks
теперь дает:Теперь у него есть trustCertEntry, и Tomcat запустится успешно.
источник
Некоторые релизы поставщиков OpenJDK вызвали это тем, что пустой
cacerts
файл был распространен вместе с двоичным файлом. Ошибка объясняется здесь: https://github.com/AdoptOpenJDK/openjdk-build/issues/555Вы можете скопировать
adoptOpenJdk8\jre\lib\security\cacerts
в файл из старой установки, какc:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts
.Версия с ошибкой AdoptOpenJDK: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
источник
Если вы испытываете это в Ubuntu с JDK9 и Maven, вы можете добавить эту опцию JVM - сначала проверьте, существует ли путь:
Если файл отсутствует, попробуйте установить CA-Certificates-Java, как кто-то заметил:
источник
У меня было это сообщение об ошибке на Java 9.0.1 на Linux. Это произошло из-за известной ошибки в JDK, когда файл cacerts пуст в двоичном пакете .tar.gz (скачано с http://jdk.java.net/9/ ).
См. «Известные проблемы» в примечаниях к выпуску JDK 9.0.1 : «TLS не работает по умолчанию в OpenJDK 9».
В Debian / Ubuntu (и, возможно, других производных) простой обходной путь - заменить файл cacerts на файл из пакета "ca-Certificates-java":
В Red Hat Linux / CentOS вы можете сделать то же самое из пакета «ca-Certificates»:
источник
У меня была эта проблема при попытке использовать Maven 3, после обновления с Ubuntu 16.04 LTS (Xenial Xerus) до Ubuntu 18.04 LTS (Bionic Beaver).
Проверка / usr / lib / jvm / java-8-oracle / jre / lib / security показала, что мой файл cacerts был символической ссылкой, указывающей на
/etc/ssl/certs/java/cacerts
.У меня также был файл с подозрительным названием
cacerts.original
.Я переименовал
cacerts.original
вcacerts
, и это решило проблему.источник
cacerts.original
Файл был вjks
формате, и был создан с Ubuntu 16.04 в Java 8, в котором используется этот формат , как по умолчанию.cacerts
Файл был вpkcs12
формате, генерируемой Ubuntu 18.04 это Java 10, который использует этот формат , как по умолчанию. Как объяснено в другом месте в этой теме, новый формат требует, чтобы вы передали пароль исполняемому файлу. Но до тех пор, пока вы создаете новый пустойjks
cacerts
файл или копируете старый, процесс генерации следующего каскаса будет очищать существующий файл и пополнять его сертификатами CA из файловой системы.Я также столкнулся с этим в OS X после обновления OS X v10.9 (Mavericks), когда использовалась старая Java 6 и пытался получить доступ к URL-адресу HTTPS. Исправление было обратным Петру Криенсу; Мне нужно было скопировать
cacerts
пространство 1.7 в папку, связанную с версией 1.6:источник
В моем случае файл JKS, используемый в клиентском приложении, был поврежден. Я создал новый и импортировал в него SSL-сертификаты конечного сервера. Затем я использовал новый JKS-файл в клиентском приложении в качестве хранилища доверия, например:
Источник: Java SSL и хранилище ключей сертификатов
Я использую инструмент (KeyStore Explorer) для создания нового JKS. Вы можете скачать его по этой ссылке, KeyStore Explorer .
источник
Вы также можете столкнуться с этой ошибкой после обновления до Spring Boot 1.4.1 (или новее), поскольку он включает Tomcat 8.5.5 как часть своих зависимостей.
Проблема связана с тем, как Tomcat работает с хранилищем доверия. Если вы указали расположение хранилища доверенных сертификатов, совпадающее с вашим хранилищем ключей в конфигурации Spring Boot, вы, скорее всего, получите
trustAnchors parameter must be non-empty
сообщение при запуске приложения.Просто удалите
server.ssl.trust-store
конфигурацию, если вы не знаете, что она вам нужна, и в этом случае обратитесь по ссылкам ниже.Следующие проблемы содержат более подробную информацию о проблеме:
источник
Я столкнулся с этой проблемой с SDK Android SDKManager. Для меня это решение сработало:
/usr/lib/jvm/java-8-oracle/jre/lib/security/
cacert
наcacert.original
cacert
Файл был маленький один (2). Я установилoracle-java8-installer
сppa:webupd8team/java
(в соответствии с этим руководством: https://docs.nativescript.org/start/ns-setup-linux ).источник
Для справки, ни один из ответов здесь не работал для меня. Моя сборка Gradle стала таинственной сбоем из- за этой ошибки, из-за невозможности извлечь HEAD из Maven central для определенного файла POM .
Оказалось, что JAVA_HOME настроен на мою собственную сборку OpenJDK, которую я создал для отладки проблемы с javac. Установка его обратно в JDK, установленный в моей системе, исправила это.
источник
В Red Hat Linux я решил эту проблему, импортировав сертификаты в
/etc/pki/java/cacerts
.источник
Вы должны добавить две вышеупомянутые строки в свой код. Не удается найти склад доверенных сертификатов.
источник
java -Djavax.net.ssl.trustStore=/tmp/cacerts ...
или, если вы хотите установить их глобально для всех программ, запускаемых с JDK, добавьте строку вmanagement.properties
файл JDK .Я столкнулся с этой проблемой при запуске определенного набора Android для тестирования на Ubuntu 14.04 (Trusty Tahr). Две вещи сработали для меня, как предположил Шахин:
источник
Ни одно из решений, которые я нашел в Интернете, не сработало, но модифицированная версия ответа Питера Криенса, похоже, справилась с этой задачей.
Сначала найдите вашу папку Java, запустив
/usr/libexec/java_home
. Для меня это была1.6.0.jdk
версия. Затем перейдите в егоlib/security
подпапку (для меня/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security
).Затем удалите
cacerts
файл, если он уже есть, и найдите его в системе с помощьюsudo find / -name "cacerts"
. Он нашел несколько элементов для меня, в версиях XCode или других приложений, которые я установил, но также и в/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
которых я выбрал.Используйте этот файл и сделайте символическую ссылку на него (пока он находится внутри папки Java)
sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
, и он должен работать.У меня есть и - Java от Apple, загрузка 2017-001 ( https://support.apple.com/kb/dl1572 - я полагаю, именно отсюда и правильные сертификаты) и Oracle, установленная на Mac OS X v10.12 (Sierra) ,
источник
на Ubuntu 14.04 с openjdk 11 из ppa: openjdk-r / ppa это работало для меня:
в java.security измените тип хранилища ключей на
тогда:
когда вы проверите, работает ли он, убедитесь, что вы не используете ни одного демона со старой запущенной java (например,
--no-daemon
опция для gradle)эта ошибка хорошо описывает все и поможет вам понять, что происходит на https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631
источник
В Ubuntu 18.04 мне нужно было использовать OpenJDK 1.7 для поддержки старого проекта. Я скачал бинарный пакет. Но когда я выполнил свой сценарий, я получил ту же ошибку.
Решением было удалить
cacerts
файл загруженного JDK вjre/lib/security
папке, а затем создать его как символическую ссылку на системныйcacerts
файл в/etc/ssl/certs/java/
:sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts
источник
Небольшой шанс, что это поможет кому-то, но ... для всех, кто работает под управлением Java 8 из образа Docker на Raspberry Pi (с использованием процессора AMD), я получил следующий Dockerfile для сборки и успешной работы для меня
источник