Грешка - параметърът trustAnchors не трябва да е празен

Опитвам се да конфигурирам имейла си на Jenkins/Hudson и постоянно получавам грешката:

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

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

Ето няколко неща, които опитах. Опитах се да следвам съвета от тази публикация, но копирах cacerts от Windows към моята Fedora кутия, хостваща Jenkins, не работи. Опитах да следвам това ръководство, докато се опитвам да конфигурирам Gmail като мой SMTP сървър, но не стана също не работи. Също така се опитах да изтегля и преместя тези cacert файлове ръчно и да ги преместя в моята папка Java, използвайки вариант на командите на това ръководство.

Отворен съм за всякакви предложения, тъй като в момента съм блокиран. Накарах го да работи от сървър на Windows Hudson, но се боря с Linux.


person David Gill    schedule 22.07.2011    source източник


Отговори (45)


Това странно съобщение означава, че посоченият от вас trustStore е:

  • празен,
  • не е намерен, или
  • couldn't be opened
    • (due to wrong/missing trustStorePassword, or
    • разрешения за достъп до файлове, например).

Вижте също отговора на @AdamPlumb по-долу.

person user207421    schedule 22.07.2011
comment
Благодаря EJP, видях публикацията ви тук, но не бях сигурен как да проверя, че довереното хранилище е там. Също така изведох моя server.xml файл, но не бях сигурен как да проверя, че довереното хранилище е на място. Трябва ли просто да проверя keystoreFile=conf/.keystore pref (keystoreFile не присъстваше в този файл)? - person David Gill; 22.07.2011
comment
@Bubbleware Technology Грешката ще спре да се случва, когато я оправите. Това е вашата проверка. Трябва да разберете каква е текущата директория, когато изпълнявате Tomcat, ако ще посочите относителни пътища към truststore. Не мога да разбера нито главата, нито опашката на последното ти изречение. - person user207421; 24.07.2011
comment
Добре, мисля, че следвам изявлението ви там. Това, което направих, беше първо да потърся .jks файл (който не можах да намеря). След това създадох такъв с keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048. След това добавих това към променливата JAVA_OPTS в catalina.sh с командата -Djavax.net.ssl.keyStore=/root/keystore.jks За съжаление, все още получавам същата грешка на trustAnchors. - person David Gill; 28.07.2011
comment
Опитах се да изпълня командата println(System.getProperty("javax.net.ssl.trustStore")); чрез Jenkins Script Console и получавам нула. Опитах се да го настроя чрез конзолата за скриптове с System.setProperty("javax.net.ssl.trustStore", /root/keystore.jks);. Вече не получавам null, когато стартирам getProperty на trustStore, но съм почти сигурен, че това не е правилният начин да задам това, тъй като все още получавам тази грешка на truststore при тестване на моя имейл. Някакви идеи какво правя погрешно? - person David Gill; 28.07.2011
comment
@Bubbleware Technology хранилището за ключове е за ключове, хранилището за доверие е за надеждни сертификати. Съобщението за надеждни котви се отнася до доверителното хранилище, а не до хранилището за ключове, така че настройката на хранилище за ключове няма да го засегне. Правилният начин за задаване на truststore за Tomcat е или чрез опцията -D, както направихте за truststore, или евентуално чрез атрибутите на конектора в server.xml, ако има атрибути тип truststore. - person user207421; 28.07.2011
comment
Следвам какво казвате и не знам как съм пропуснал тази разлика между хранилище за ключове и хранилище за доверие. Имайки това предвид, се опитах да генерирам truststore с командата keytool -import -file CA.cer -keystore truststore. Не знам точно къде е генерирано доверителното хранилище, така че стартирах локализиране и проверих. След това добавих това доверително хранилище към моя Tomcat в catalina.sh под JAVA_OPTS с командата -Djavax.net.ssl.trustStore=/opt/downloads/jdk1.6.0_21/sample/jmx/jmx-scandir/truststore. Рестартирах сървърите си и все още получавам грешката на truststore. Изпускам ли нещо? - person David Gill; 30.07.2011
comment
Отговорът беше как го импортирах. Изглежда съм пропуснал решаваща стъпка. Вижте [Java Error InvalidAlgorithmParameterException][1] [1]: jyotirbhandari.blogspot .com/2011/09/ - person David Gill; 25.09.2011
comment
Потвърдих, че този отговор е правилен. Получавах грешката под Tomcat. Имах моето доверително хранилище в ${CATALINA_HOME}\conf, но CATALINA_HOME не се настройваше, така че Tomcat търсеше под \conf доверителното хранилище. - person SingleShot; 22.02.2012
comment
Тази грешка възниква и когато хранилището за ключове съществува, но не може да бъде достъпно по някаква друга причина, например когато потребителят, от който работи Tomcat, няма права за достъп до папката на хранилището за ключове. - person László van den Hoek; 15.07.2013
comment
@BubblewareTechnology Не, грешката беше в името на файла, а не в това как сте импортирали сертификата във файла. Вашият блог не е правилен. Също така не трябва да препоръчвате модифициране на файла JRE$/cacerts. Това ще се промени при следващото надграждане на Java. Имате нужда от процес, който го копира, добавя ваш собствен сертификат към копието и използва копието като доверително хранилище. Повторете всяко надграждане на Java. И изобщо не е нужно да казвате на Java за нейното собствено доверително хранилище, а само за вашето собствено, ако е различно. - person user207421; 21.04.2014
comment
@BubblewareTechnology благодаря, че openssl s_client -connect repo1.maven.org:443 > repo1_maven_org.cert и $JAVA_HOME/bin/keytool -import -alias repo1.maven.org -keystore $JAVA_HOME/jre/lib/security/cacerts -file repo1_maven_org.cert го поправиха, дори не се нуждаех от -Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=password. направи проблема ми от седмицата да изчезне, щастлив съм :). Между другото не подозирах доверителното хранилище (защото не видях съобщението до ant.apache.org/ivy/ivyde/history/latest-milestone/console.html), трябваше. - person n611x007; 25.09.2015
comment
В моя случай имах keystore и truststore файлове, външни за всичко, което се управлява от keytool, и трябваше просто да инициализирам моята java/scala среда с classpath, който включва тези файлове. Така че моята shell init изглежда като scala -classpath path/to/my.jar:path/to/cert/directory. - person Alexander Tronchin-James; 16.08.2016
comment
@AlexanderTronchin-James Тези файлове не се намират чрез CLASSPATH. - person user207421; 13.10.2016
comment
Ще добавя един обрат: дори когато довереното хранилище съществува, достъпно е, в правилния формат е, ако е НАПЪЛНО ПРАЗНО, това е грешката, която можете да получите с различни библиотеки (включително Apache HttpClient). - person Alan Franzoni; 22.08.2017
comment
За информация, в моя случай паролата на магазина е неправилна. - person Nathan W; 11.05.2018
comment
между другото това се случва напр. при превключване от OracleJDK8 към OpenJDK8, тъй като OpenJDK идва с празно доверително хранилище. Копирането на този от OpenJDK11 решава проблема - person light_303; 13.11.2018
comment
Може да се случи и ако стартирате Oracle JDK8, но зададете своя JAVA_HOME на OpenJDK8. - person Daryl Banttari; 30.11.2018
comment
Това може да се случи и при използване на хранилище за ключове PKCS12 и не е предоставена парола (= null), когато хранилището е заредено, вижте източник - person Marcono1234; 31.05.2019
comment
Трябваше да осигуря -Djavax.net.ssl.trustStorePassword=changeit. Мислех, че не трябва да го предоставяме, ако това е паролата по подразбиране? - person DLight; 16.04.2020
comment
@DLight Няма нищо общо с паролата по подразбиране. Изобщо не е нужно да го предоставяте, освен ако не искате довереното хранилище да бъде потвърдено. - person user207421; 26.08.2020
comment
@Marcono1234 Това се отнася само за PrivateKeyEntry, което означава, че изобщо не е хранилище за доверие, а хранилище за ключове. - person user207421; 26.08.2020
comment
За мен проблемът беше в различен отговор, типът на хранилището трябва да е JKS за ca/server truststore - person Kukeltje; 16.09.2020
comment
@Kukeltje Това попада под „не може да се отвори“. - person user207421; 17.09.2020
comment
@light_303, използвам openjdk 8 и съм генерирал сертификат с помощта на openjdk11, но все още съм изправен пред същия проблем. - person Fayaz; 17.06.2021
comment
@Fayaz трябва да копирате файла за доверително съхранение на OpenJDK11 - няма значение как са създадени вашите сертификати. - person light_303; 28.06.2021

В 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
comment
Потребители на Ubuntu 18, прочетете това! това ще спести много часове от живота ви! Благодаря ти! - person vak; 03.05.2018
comment
Този отговор ми помогна да коригирам същата грешка с maven на Ubuntu 18.04. Трябваше да сменя собственика на файла /etc/ssl/certs/java/cacerts от root на себе си, за да мога да пиша в него. След това го превключих обратно. - person Yuri Gor; 08.05.2018
comment
Стартирах sudo rm /etc/ssl/certs/java/cacerts и след това sudo update-ca-certificates -f и това поправи проблема ми в kubuntu 18.04. - person jsn; 13.05.2018
comment
Работи като чар! Имах този проблем на ubuntu 18.04 - person Thomas Theunen; 23.05.2018
comment
@jsn Вашето решение работи и за мен на Kubuntu 18.04. - person Hrvoje T; 25.05.2018
comment
@jsn, причината, поради която това реши проблема ви, беше, че сте предприели и допълнителна стъпка, която сте пропуснали да споменете. Причината, поради която не препоръчах това решение вместо по-просто, е, че хората могат по-късно да забележат, че като страничен ефект нещо друго се е повредило, което изисква от тях да отделят повече време за проследяване на това. - person Mikael Gueck; 25.05.2018
comment
Това всъщност трябва да е част от нов въпрос, защото е толкова специфичен за новите потребители на ubuntu 18, благодаря много! - person WhGandalf; 26.05.2018
comment
@jsn Това решение е невероятно. Работеше на Ubuntu 18.04 за мен. Благодаря ти :) - person Bimde; 31.05.2018
comment
Това решение е злато! Той не само реши проблема с Jenkins, но също така и други проблеми, като maven build! - person Bing Ren; 08.06.2018
comment
Ти ми спаси живота! - person Eduardo Casas; 13.06.2018
comment
Много благодаря !! решава много странични ефекти. Щракнах върху „този проблем ме засяга“, за да благодаря за справка - person bdurand; 19.06.2018
comment
Запазено от @jsn на Ubuntu Mate 18.04 - person Serafim; 27.06.2018
comment
Не съм наясно с обяснението, но работи за мен на Ubuntu 18.04. - person Sergii; 30.06.2018
comment
Пич! ТИ СИ МОЯТ ГЕРОЙ!! - person Amen; 05.07.2018
comment
@jsn може би трябва да бъде отделен отговор и да бъде оценен на върха. При мен работи 18.04 - person Vadim; 09.07.2018
comment
@jsn Благодаря ви за поправката! За бъдещи читатели: това работи за openjdk-8-jdk, но не и за openjdk-11-jdk. Изглежда, че /etc/ca-certificates/update.d/jks-keystore изглежда не поддържа openjdk-11 (не е посочен там). - person Dalibor Filus; 11.07.2018
comment
О, боже мой! този проблем ме подлуди 2 дни. Това е божи дар! Благодаря много, сър! - person tiengtinh; 12.07.2018
comment
@jsn, благодаря за решенията, работи и на linux mint 19, който е базиран на ubuntu 18.04 - person Samrat; 16.07.2018
comment
Това е единственото нещо, което работи за мен на Ubuntu 16.04 с Java 11. - person ipkpjersi; 24.11.2018
comment
Решението на @jsn също работи за Debian Stretch + openjdk8 - person HRJ; 27.03.2019
comment
Решението просто работи. Без никакви ако. Просто копирайте и поставете. Благодаря много. - person St.Antario; 14.06.2019
comment
Смених версията на Java за NiFi от версия на Oracle на по-модерен OpenJDK и проработи - person hanzo2001; 27.11.2019
comment
третото решение ми помогна много, но ако добавите как да регенерирате cacerts, ще бъде много по-голямо. sudo update-ca-certificates -f и sudo apt install ca-certificates-java --reinstall което намерих тук - person Asylzat; 03.06.2020
comment
Радвам се да чуя това, @AsylzatAzaev. Поясних изречението, което посочихте. - person Mikael Gueck; 03.06.2020
comment
Борих се с това с дни. sudo update-ca-certificates -f и sudo apt install ca-certificates-java --reinstall го поправиха за мен на maven Ubuntu 18 - person Bundayy Olayinka; 03.07.2020

Това реши проблема за мен в 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, така че това трябва да бъде изрично инсталирано.

person Michael Condouris    schedule 08.06.2015
comment
Благодаря, това реши проблема за мен, когато го срещнах на Ubuntu 15.04. - person Macil; 22.06.2015
comment
Работил върху Raspbian на Raspberry Pi - person Defozo; 09.05.2016
comment
Сблъсках се с този проблем със стабилни бекпортове на Debian jesse с OpenJDK8 и това поправи проблема. Използвах това, докато създавах Docker изображения. :) - person Tuxdude; 13.06.2016
comment
За съжаление получавам command not found, когато опитам това на Ubuntu 16.04. - person Magick; 15.08.2016
comment
Нямам абсолютно никаква представа какво направих току-що, но това реши проблема за мен в Ubuntu 16.04 - person Matt; 14.12.2016
comment
Atlassian Bitbucket Server v4.9.1 на Debian Jessie (8.6) зад защитната стена имаше същия проблем. Това го поправи за мен. - person John McFo; 01.03.2017
comment
Работих върху инсталиране на Artifactory на Ubuntu 14.04. Преди тази команда опитът за добавяне на отдалечено хранилище извеждаше грешката trustAnchors. След тази команда гладко плаване :) - person EugeneRomero; 07.08.2017
comment
Поправено за мен в Ubuntu 14.04. Благодаря ти! - person simianarmy; 14.03.2018
comment
Не работи на Ubuntu MATE 18.04, за съжаление. Ще опитам да преинсталирам Java. - person Pranav A.; 23.04.2018
comment
Не работи и в Xubuntu 18.04. Изглежда, че няма да работи на 18.04. Някакви предложения какво да правя? - person ivan.ukr; 08.05.2018
comment
Някаква идея, момчета, какво да правя в Ubuntu 18.04? - person Gagan; 05.06.2018
comment
Стартирайте sudo apt install ca-certificates-java. Тогава sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure - person codefx; 22.06.2018
comment
@codefx - Направих това, което предложихте и не работи - на Ubuntu 18.x с Java 10 (по подразбиране). - person mzedeler; 08.07.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
person shvahabi    schedule 04.06.2018
comment
Това описание е фактически неправилно и само коригира проблема в същия смисъл, както преинсталирането на Windows може да реши проблема. Няма нужда да премахвате всички Java пакети. Ако искате да вървите по този начин, трябва само да инсталирате пакета openjdk-8-jdk, да премахнете файла /etc/ssl/certs/java/cacerts и да стартирате sudo update-ca-certificates -f, което е заобиколният начин за превключване от форматиран pkcs12 cacerts файл към форматиран jks, както е описано другаде в тази тема . - person Mikael Gueck; 22.06.2018
comment
@MikaelGueck Въпреки че логиката изглежда е на ваша страна, тук съм, за да ви уверя, че преди това направих точно това, което е описано във вашия коментар и в повечето други гласувани отговори, а в 18.04 това е единственият отговор, който работи< /b>. Мисля, че гласуването ви против трябва да се превърне в гласуване за или поне да изчезне, тъй като е крайно незаслужено. - person Andrea Ligios; 25.06.2018
comment
@AndreaLigios, можете сами да прочетете скриптовете, те са доста кратки. Те имат твърдо кодиран набор от пътеки JAVA_HOME от 8 до 10, опитват ги един по един, извикват файловия генератор на Debian CA, който можете също да прочетете, който използва съществуващия файлов формат, тъй като кодът за манипулиране на ключови файлове на JDK, който можете да прочетете, има резервен режим на съвместимост. Ако вашият компютър изпълнява този прост софтуер по различен начин, може да имате други проблеми с него. Променихте ли вашите java алтернативи и извикахте ли друга JVM, защото тогава премахването може да е нулирало алтернативите? - person Mikael Gueck; 25.06.2018
comment
@MikaelGueck да, в един от предишните опити модифицирах своите алтернативи на Java, така че вероятно беше това. Аз съм първият, който обича да се рови в изходния код и да открива как работят нещата, но това днес не беше целта ми, беше само едно от 5-6 различни неочаквани препятствия, които имах по пътя към истинската си цел. Този отговор ми позволи да реша проблема за по-малко от 2 минути! Колко време трябва да отделя, за да разгледам скриптовете и да намеря по-добро решение? И за какво, за да спестите няколко мегабайта? Това е драстично, но работи (и без значение какъв е проблемът), така че голяма благодарност на OP за адски заетите - person Andrea Ligios; 25.06.2018
comment
когато всъщност изпълних 2-те изчиствания и видях списъка с пакети, които apt премахваше, това ми се стори малко тежко, но свърши работа за моята маловажна инсталация на kubuntu 18.04, така че съм щастлив да спестя малко количество писане, което използвах sudo apt-get purge openjdk* java-common default-jdk вместо --purge remove - person northern-bradley; 07.07.2018
comment
Работи на Ubuntu 18.04 LTS. Също така трябваше да се уверя, че $JAVA_HOME е настроен на /usr/lib/jvm/java-1.8.0-openjdk-amd64 - person PiKey; 13.07.2018
comment
Търся решение от 2 дни и вашият отговор реши проблема ми, благодаря. Току-що преминах към Kubuntu 18.04, това проработи. - person Inmer; 14.07.2018
comment
Изтеглянето на jdk свърши работа за мен. oracle.com/technetwork/java/javase/downloads/ - person Ranjeet Singh; 24.09.2019

EJP в общи линии отговори на въпроса (и осъзнавам, че това има приет отговор), но току-що се занимавах с този ръбов случай и исках да увековеча решението си.

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

В моя случай бях редактирал моя server.xml файл, за да укажа keystoreType на PKCS, но не посочих truststoreType, така че той по подразбиране е каквото и да е keystoreType. Посочването на truststoreType изрично като JKS го реши за мен.

person Adam Plumb    schedule 07.08.2014
comment
Е, помагам ти да увековечиш решението на крайния си случай. там става интересно. - person n611x007; 25.09.2015
comment
Точно това беше моят проблем. Използвах Spring Boot 1.4.2.RELEASE и имах хардуерно хранилище за ключове и софтуерно доверително хранилище. Посочих доставчика и типа за хранилището за ключове, но не и доверителното. В резултат на това довереното хранилище е използвало грешен доставчик и тип. Посочването на тези (SUN и JKS) реши проблема. - person Kenco; 06.12.2016
comment
как точно направи това? (прозорци тук) - person tatsu; 31.01.2018
comment
Сблъсках се с това с моя Android grandle днес, почти разбирам какво казваш, но не казваш как да го реша. Неполезен отговор - person Lothar; 24.05.2018
comment
в моя случай имах trusttore, генериран от jdk 14 keytool, по подразбиране е pkcs формат, опитвайки се да се свържа с kafka клъстер, който използва jks keystore. Променям начина, по който създадох довереното хранилище, за да използва превключвател -storetype jks и това го разреши - person James Render; 02.07.2020

Попаднах на това решение от публикация в блог Коригиране на проблема с 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 файл, който използва JDK 1.6 на Apple:

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 биха могли да добавят това към своите инсталационни скриптове.

person Peter Kriens    schedule 06.06.2012
comment
Моята команда ln (на OSX 10.6.8) няма опция h; какво трябва да се направи? - person Andrew Swan; 20.06.2012
comment
А, имах две ln команди, една в /usr/bin (по подразбиране) и една в /bin; последният имаше опция h и работеше. - person Andrew Swan; 20.06.2012
comment
Поправих моята повредена инсталация 1.6, свързваща се с cacerts от инсталацията на системата 1.8 с тази ln техника. Благодаря! - person A21z; 20.02.2015
comment
За бъдещи читатели: изглежда, че имате нужда и от другите 3 файла, които са в папката security (blacklisted.certs, local_policy.jar и US_export_policy.jar), за да бъде щастлива Java. - person awksp; 18.06.2015
comment
@Peter Kriens, защо свързан към cacerts под jre директория? - person BAE; 24.10.2018
comment
Така че в случая на Java 1.6 пътят, където искате да създадете връзките, може да е различен. В моя случай го инсталирах ръчно от компресиран ZIP, така че моята инсталационна точка всъщност беше тази: /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home и папката, в която създадох символните връзки към cacerts и blacklisted.certs файлове, беше тази lib/security. След предоставянето на тези връзки проблемът е коригиран. - person RickB; 23.01.2019

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

person yvesr    schedule 14.03.2013
comment
Открих, че трябва да стартирам update-ca-certificates -f ръчно, за да попълня файла cacerts - person Portablejim; 05.02.2015
comment
@Portablejim Благодаря. Вашият коментар реши първия проблем, който срещнах при изграждането на Apache Spark на Ubuntu 15.04beta. - person Paul; 31.03.2015
comment
Благодаря ти, @Portablejim, твоят коментар ми свърши работа в Ubuntu 15.04. - person David Berg; 05.10.2015
comment
Благодаря. Това реши моя проблем с PhpStrom + patched JDK. Написах този ключ във файла phpstorm64.vmoptions. - person Vijit; 04.11.2016
comment
Не работи за мен в ubuntu 18.04 и JDK е 1.8.0_62 - person Devendra Singraul; 27.12.2018
comment
Това решение работи и за мен, работещ с Bitbucket сървър на система Hetzner с debian. Използвах този ред, за да принудя Java да работи с trustStore export ES_JAVA_OPTS=-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts - person Marcel Grolms; 04.06.2020
comment
благодаря ви - нямах представа и дори не помислих, че ubuntu ca-certificates utils също ще създадат java JKS пакет - person jamey graham; 04.05.2021

Сблъсках се с точно този проблем на OS X, използвайки JDK 1.7, след надграждане до OS X v10.9 (Маверикс). Корекцията, която работи за мен, беше просто да преинсталирам версията на Java на Apple, налична на http://support.apple.com/kb/DL1572.

person KiwiMartin    schedule 30.10.2013
comment
Срещнах това с Java 6, използвана от Grails на OSX. Освен това имах инсталирана Java 7 от Oracle и също надстроена до Mavericks. Повторното инсталиране на Java 6 от уебсайта на Apple също реши проблема за мен. - person pm_labs; 09.09.2014
comment
Попаднах на това при инсталиране на open jdk 6 в облачна кутия на ubuntu. Радвам се да видя познато лице, BTW - person Ben Hutchison; 17.06.2015

избягах

sudo update-ca-certificates -f

за създаване на файл със сертификат и след това:

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

Бях отново на работа, благодаря момчета. Жалко, че не е включено в инсталацията, но в крайна сметка стигнах дотам.

person Johnny    schedule 23.10.2015
comment
Когато стартирам sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure** получавам sudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found - person Magick; 15.08.2016
comment
Само sudo update-ca-certificates -f е достатъчно на Debian jessie с openjdk-8-jre-headless от jessie-backports, стига ca-certificates-java да е инсталиран. Мисля, че редът на инсталиране има значение (JRE след ca-certificates-java може да причини това, тъй като последният няма никакви тригери за backported Java 8). - person mirabilos; 07.02.2017
comment
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure без звезди ** - person Yu Jiaao; 06.09.2017
comment
update-ca-certificates -f е нещото, което го поправи. Не ми трябваше втората команда - person Mark Jeronimus; 04.06.2020

Грешката казва, че системата не може да намери довереното хранилище в пътя, предоставен с параметъра 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% по някакъв начин е презаписана), така че използвах това тривиално решение.

Идеята е да се предостави валиден път до файла truststore - в идеалния случай би било да се използва относителен път. Можете също да използвате абсолютен път.

За да сте сигурни, че типът магазин е JKS, трябва да изпълните следната команда:

keytool -list -keystore cacerts

Keystore type: JKS
Keystore provider: SUN

Забележка: тъй като сертификатите имат дати на изтичане или могат да станат невалидни по други причини, проверявайте от време на време дали сертификатите в cacerts все още са валидни. Обикновено ще намерите валидните версии на сертификатите в най-новите версии на jdk.

person razvanone    schedule 30.03.2016
comment
Това е единственият отговор, който действително работи. Благодаря @razvanone - person Akshar Patel; 21.04.2018
comment
Успях да хвана една малка грешка: трите реда във файла eclipse.ini трябва да са на действителни три отделни реда. Първоначално ги сложих всички на един ред и eclipse не взе това. - person SiKing; 15.11.2018

Нека да проверя набързо.. между другото, как да споделя дневника си с вас.. има ли начин да го прикача, за да го видите? Много благодаря
person ericek111    schedule 26.04.2018

Имах много проблеми със сигурността след надграждане до OS X v10.9 (Mavericks):

  • SSL проблем с Amazon AWS
  • Партньорът не е удостоверен с Maven и Eclipse
  • Параметърът trustAnchors не трябва да е празен

Приложих тази актуализация на Java и тя поправи всичките ми проблеми: http://support.apple.com/kb/DL1572?viewlocale=en_US

person Freddy Boucher    schedule 30.12.2013
comment
уф Java 6 е след много години след края на публичната си поддръжка и със сигурност е надупчена с дупки в сигурността. Apple го прави достъпен за изтегляне, така че по-старият софтуер, който не може да се изпълнява с Java 7/8, може да продължи да се изпълнява, но не трябва да се използва за създаване на SSL връзки към услуги в обществения интернет, като 1. AWS, 2. Maven Централна, 3. друго. - person Zac Thompson; 06.03.2015

Някои версии на доставчици на 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

person raisercostin    schedule 02.10.2018
comment
Мисля, че и при мен беше така. В AdoptOpenJDK 202 този бъг присъства и в 222 работи. Така че актуализирайте своя jdk, ако е възможно. - person Marty; 09.04.2020

За мен това беше причинено от липсата на trustedCertEntry в truststore.

За да тествате, използвайте:

keytool -list -keystore keystore.jks

Това ми дава:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

cert-alias, 31-Jul-2017, PrivateKeyEntry

Въпреки че моят PrivateKeyEntry съдържа CA трябваше да бъде импортиран отделно:

keytool -import -alias root-ca1 -file rootca.crt -keystore keystore.jks

Той импортира сертификата и след това повторното изпълнение на keytool -list -keystore keystore.jks сега дава:

Your keystore contains 2 entries

cert-alias, 31-Jul-2017, PrivateKeyEntry,
Certificate fingerprint (SHA1): <fingerprint>

root-ca1, 04-Aug-2017, trustedCertEntry,
Certificate fingerprint (SHA1): <fingerprint>

Сега има trustedCertEntry и Tomcat ще стартира успешно.

person muttonUp    schedule 04.08.2017
comment
Забележка: проверете урока за baeldung с полезен Makefile като пряк път за създаване на хранилище за ключове и доверително хранилище (проект spring-security-x509) baeldung.com/x-509-authentication-in-spring-security - person hello_earth; 02.07.2019

Очаквах такива неща, тъй като използвам алтернативна JVM в моето Talend Open Studio (поддръжка в момента съществува само до JDK 1.7). Използвам 8 за целите на сигурността... както и да е

  • Актуализирайте вашето хранилище за сертификати:

    sudo update-ca-certificates -f
    

тогава

  • добавете нова стойност във вашите параметри за инициализация

    sudo gedit $(path to your architecture specific ini i.e. TOS_DI...ini)
    
    Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
    

При мен второто влизане свърши работа. Мисля, че в зависимост от версията на Talend Open Studio/TEnt + JVM има различно име на параметър, но търси същия файл за съхранение на ключове.

person steveoams    schedule 24.07.2015
comment
Откъде взехте имота javax.net.ssl.trustAnchors? Не се споменава в документацията на JSSE. - person user207421; 04.09.2015

Ако срещнете това в Ubuntu с JDK9 и Maven, можете да добавите тази JVM опция - първо проверете дали пътят съществува:

-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts

Ако файлът липсва, опитайте да инсталирате ca-certificates-java, както някой отбеляза:

sudo apt install ca-certificates-java
person dmatej    schedule 22.09.2017
comment
Ако използвате docker, можете също да опитате maven:3-jdk-9-slim image вместо maven:3-jdk-9 - person Konstantin Pavlov; 19.02.2018
comment
Благодаря, това работи за мен за openjdk-8-jdk в ubuntu 18.04 - person Aftab Naveed; 14.06.2018

Може да срещнете тази грешка и след надграждане до Spring Boot 1.4.1 (или по-нова), тъй като тя включва Tomcat 8.5.5 като част от неговите зависимости.

Проблемът се дължи на начина, по който Tomcat работи с доверителното хранилище. Ако случайно сте указали местоположението на вашето доверително хранилище като същото като вашето хранилище за ключове в конфигурацията на Spring Boot, вероятно ще получите съобщението trustAnchors parameter must be non-empty при стартиране на приложението.

server.ssl.key-store=classpath:server.jks
server.ssl.trust-store=classpath:server.jks

Просто премахнете конфигурацията server.ssl.trust-store, освен ако не знаете, че имате нужда от нея, в който случай вижте връзките по-долу.

Следните проблеми съдържат повече подробности за проблема:

person Robert Hunt    schedule 04.07.2017
comment
Това решение спаси живота ми днес, благодаря ви много. - person Sami Haroon; 26.06.2020

Получих това съобщение за грешка на 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":

sudo apt install ca-certificates-java
cp /etc/ssl/certs/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts

В Red Hat Linux/CentOS можете да направите същото от пакета „ca-certificates“:

sudo yum install ca-certificates
cp /etc/pki/java/cacerts /path/to/jdk-9.0.1/lib/security/cacerts
person Mossroy    schedule 29.10.2017

Имах този проблем, когато се опитвах да използвам 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 и това реши проблема.

person John Deverall    schedule 23.04.2018
comment
Файлът cacerts.original беше във формат jks и беше генериран с Java 8 на Ubuntu 16.04, който използваше този формат по подразбиране. Файлът cacerts беше във формат pkcs12, генериран от Java 10 на Ubuntu 18.04, който използва този формат по подразбиране. Както е обяснено другаде в тази тема, новият формат изисква да подадете паролата към изпълнимия файл. Но докато или генерирате нов празен jks cacerts файл, или копирате стар, следващият процес на генериране на cacerts ще изпразни съществуващия файл и ще го напълни отново с CA сертификати от файловата система. - person Mikael Gueck; 23.06.2018

Срещнах това и в OS X след актуализиране на OS X v10.9 (Mavericks), когато старата Java 6 се използваше и се опитваше да получи достъп до HTTPS URL. Поправката беше обратното на Peter Kriens; Трябваше да копирам cacerts от пространството 1.7 до местоположението, свързано от версия 1.6:

(as root)
umask 022
mkdir -p /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
cp $(/usr/libexec/java_home -v 1.7)/jre/lib/security/cacerts \
    /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security
person Partly Cloudy    schedule 15.11.2013
comment
Командата тук се опитва да копира директория във файл; няма никакъв смисъл. - person praseodym; 05.12.2013
comment
Съгласен съм с оценката за използване на обратно решение. Открих, че jdk1.6 има счупена мека връзка /Library/Java/JavaVirtualMachines/1.6.0_33-b03-424.jdk/Contents/Home/lib/security/cacerts -› /System/Library/Java/Support/CoreDeploy.bundle /Съдържание/Начало/lib/security/cacerts. Така че прехвърлих повредената мека връзка, след което копирах върху cacerts от инсталацията на jdk1.7. - person James A Wilson; 14.01.2014
comment
ЗАБЕЛЕЖКА: когато сте готови, трябва да можете да изберете файла cacerts, който сте копирали, за да потвърдите разрешенията. - person Gray; 31.08.2015
comment
Също така, поправи cp да върви в правилната посока и добави umask за mkdir и cp. - person Gray; 31.08.2015

@EJP съжалявам, че не се обясних ясно, да, сериализацията ще работи, но в разпределена система стабилността може да бъде повлияна. Това се случва, защото докато обектите преминават от JVM към JVM, стойностите на полетата се губят в зависимост от версията на класа, който използват
person Salman    schedule 22.03.2016
comment
keystore-explorer свърши работата вместо мен. Просто трябва да създадете хранилище за ключове по подразбиране и да прегледате и запазите файла със сертификата за сайта/хоста. - person Shantha Kumara; 22.09.2016

Срещнах този проблем с Android SDK sdkmanager. За мен това решение работи:

  1. Go to /usr/lib/jvm/java-8-oracle/jre/lib/security/
  2. Заменете cacert с cacert.original

Файлът cacert беше малък (22B). Инсталирах oracle-java8-installer от ppa:webupd8team/java (според това ръководство: https://docs.nativescript.org/start/ns-setup-linux).

person Gabriel Cséfalvay    schedule 07.06.2018

Аз съм фен на преносимостта, така че не инсталирам java, просто изтеглям tar.gz и експортирам някои стойности в пътя и всичко работи.

Борих се с този проблем и нито едно решение (инсталиране или актуализиране на сертификати за оперативни системи) не ми помогна.

Грешката в моя случай беше: празни cacerts в моя jdk.

Не знам защо, но моят jdk.tar.gz имаше празен файл cacerts

/../some_openjdk/jre/lib/security/cacerts размер: 32 байта

Изтеглено от:

Поправете

След няколко опита намерих правилен jdk.tar.gz с файл cacerts с размер 101 KB

Изтеглих този отворен jdk от https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases

Намерих този url в този Dockerfile:

person JRichardsz    schedule 26.07.2020
comment
за същия проблем моят cacert имаше 0 записа, така че наличието на правилните cacerts реши проблема ми - person Mayur; 24.09.2020

За протокола, нито един от отговорите тук не ми помогна. Моята компилация на Gradle започна да се проваля мистериозно с тази грешка, не можа да извлече HEAD от Maven централен за конкретен POM файл.

Оказа се, че съм настроил JAVA_HOME на моя лична компилация на OpenJDK, която бях създал за отстраняване на грешки при проблем с javac. Връщането му към JDK, инсталиран на моята система, го поправи.

person Stevey    schedule 20.03.2017
comment
... което накара довереното хранилище да не бъде намерено, според други отговори. - person user207421; 22.03.2017
comment
Да, но да знаете, че довереното хранилище не може да бъде намерено, е напълно безполезно, ако не можете да разберете защо не се намира. Има много и много възможни начини да се обърка и е разочароващо, когато никой от тях не е конкретният начин, по който се проваля за вашата собствена система. - person Stevey; 22.03.2017
comment
Всички те „случайно“ са една и съща грешка: посоченото доверително хранилище не може да бъде отворено или е празно. Има милиони начини, по които може да възникне тази ситуация и няма достатъчно място в SO, за да ги изброя всички. - person user207421; 07.03.2018

Малък шанс това да помогне на всеки, но.... за всеки, който работи с Java 8 от Docker Image на Raspberry Pi (използвайки AMD CPU) Получих следния Dockerfile, за да създам и стартирам успешно за мен

FROM hypriot/rpi-java
USER root

WORKDIR /usr/build/

RUN /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
RUN update-ca-certificates -f
RUN /var/lib/dpkg/info/ca-certificates-java.postinst configure

EXPOSE 8080

ARG JAR_FILE=target/app-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} app.jar

ENTRYPOINT ["java", "-Djavax.net.ssl.trustStorePassword=changeit", "-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts", "-jar", "app.jar"]
person Christian Bartram    schedule 12.01.2020

На Red Hat Linux разреших този проблем чрез импортиране на сертификатите в /etc/pki/java/cacerts.

person ak1    schedule 13.05.2015

System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\user-id\\Desktop\\tomcat\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "passwd");

Трябва да добавите горните два реда към вашия код. Не може да намери довереното хранилище.

person Divyesh Kalbhor    schedule 31.05.2016
comment
Ако не го направите, ще използва JRE truststore и със сигурност ще може да го намери. Грешката се дължи на неправилни стойности в тези параметри, а не на тяхната липса. Файлът, посочен във вашия код, се отнася само за вашата инсталация, а не като цяло. - person user207421; 17.11.2017
comment
Правилният начин да зададете тези свойства е като ги подадете на командния ред: java -Djavax.net.ssl.trustStore=/tmp/cacerts ... или ако искате да ги зададете глобално за всички програми, изпълнявани с JDK, добавете реда към management.properties файла на JDK. - person Mikael Gueck; 03.06.2020

Сблъсках се с този проблем, докато изпълнявах определен пакет от Android за тестване на Ubuntu 14.04 (Надежден Тар). Две неща работиха за мен, както беше предложено от shaheen:

sudo update-ca-certificates -f

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
person DPKGRG    schedule 25.10.2017

Нито едно от решенията, които намерих в интернет, не работи, но модифицирана версия на Отговорът на Питър Кринс изглежда върши работа.

Първо намерете вашата папка 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).

person shw    schedule 01.11.2017

на ubuntu 14.04 с openjdk 11 от ppa:openjdk-r/ppa това работи за мен:

в java.security променете типа хранилище за ключове на

keystore.type=jks

тогава:

sudo dpkg --purge --force-depends ca-certificates-java
sudo apt-get install ca-certificates-java

когато проверите дали работи, уверете се, че не използвате демон със стара Java, която все още работи (напр. --no-daemon опция за gradle)

този бъг описва всичко добре и ще ви помогне да разберете какво се случва https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631

person piotrek    schedule 12.01.2019

В 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

person Mike    schedule 25.07.2019

Намерих още една причина за тази грешка, която не е свързана с Ubuntu.

Опитах се да настроя взаимен TLS в приложение Spring boot 2 и се натъкнах на този проблем, след като използвах доверително хранилище, което имаше само запис на частен ключ и не запис на доверен сертификат.

Това е моята Spring Boot TLS конфигурация

server.port=8443
server.ssl.key-alias=oba-tls
server.ssl.key-password=mypw
server.ssl.key-store-password=mypw
server.ssl.key-store=classpath:keys/tls-keystore.pfx
server.ssl.key-store-type=PKCS12
server.ssl.enabled=true
server.ssl.client-auth=need

server.ssl.trust-store=classpath:keys/truststore.pfx
server.ssl.trust-store-password=mypw
server.ssl.trust-store-type=PKCS12
server.ssl.ciphers=ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA384
server.ssl.protocol=TLS
server.ssl.enabled-protocols=TLSv1.2

За генериране на truststore.pfx трябваше да използвам следните команди, за да го накарам да работи.

openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -out cert.crt

keytool -importcert -alias oba-trust -file cert.crt -keystore truststore.jks

keytool -importkeystore -srckeystore truststore.jks -destkeystore truststore.pfx -srcstoretype JKS - deststoretype PKCS12 -deststorepass yourpassword
person Julius    schedule 08.08.2019

Попаднете в това с помощта на Amazon SDK v2, Windows 10 и JDK8. Amazon SDK се оплакваше от зареждане на идентификационни данни.
Реших това, като замених файла security/cacert на JDK8 с този на JDK11.

person rdupz    schedule 17.07.2020

Сблъсках се с проблема, докато импортирах проект на Gradle в IntelliJ IDEA 14. Едно решение беше използването на локално копие на Gradle вместо обвивка от директорията на проекта.

person Sergey Filkin    schedule 20.02.2015

В Ubuntu:

sudo apt инсталирайте ca-сертификати-java

or

sudo apt-get install ca-certificates-java

сортира го за мен.

person The Tomahawk    schedule 11.01.2017
comment
Отговорът на Джони (по-горе) и след това стартирането на вашия отговор свършиха работата за мен. Аз съм на LInux Mint, използвайки OpenJDK - person Abhay Shiro; 30.12.2020

Друга причина за това е, че всъщност е валидна грешка. Някои подли Wi-Fi горещи точки ще се забъркат със сертификати и man-in-the-middle атакуват ви, за да направите кой знае какво (бягайте!).

Някои големи работодатели ще направят същия трик, особено в чувствителни мрежови зони, за да могат да наблюдават целия криптиран трафик (не е страхотно от гледна точка на крайния потребител, но може да има основателни причини за това).

person Matt Broekhuis    schedule 23.02.2017
comment
Грешката е причинена от липсващ доверителен файл. Няма нищо общо с wifi горещите точки. - person user207421; 17.11.2017

Получих тази грешка, когато използвах доверително хранилище, което беше експортирано с помощта на IBM Websphere JDK keytool във формат #PKCS12 и се опитвах да комуникирам през SSL, използвайки този файл на Oracle JRE.

Моето решение беше да стартирам на IBM JRE или да преобразувам truststore в JKS с помощта на IBM Websphere keytool, така че успях да го стартирам в Oracle JRE.

person Maarten    schedule 07.03.2017

За мен това беше разрешено само чрез надграждане на плъгин на Jenkins, „Email Extension Plugin“, до най-новата версия (2.61).

Тези два плъгина са отговорни за конфигурацията на имейл в Jenkins:

  • Разширение за имейл
  • Шаблон за разширение за имейл
person himanshu vyas    schedule 01.11.2017

Получавам същата грешка при изпращане на имейли, но НЕ винаги. В моя случай промених един ред код, за да получа нов Session всеки път:

MimeMessage message = new MimeMessage(Session.getDefaultInstance(props, authenticator));

to

MimeMessage message = new MimeMessage(Session.getInstance(props, authenticator));

Оттогава изпращането на имейли работи всеки път.

Грешката, която получих:

javax.mail.MessagingException: Не можа да преобразува сокет в TLS;
вложеното изключение е: javax.net.ssl.SSLException:
java.lang.RuntimeException: Неочаквана грешка:
java.security.InvalidAlgorithmParameterException: параметърът trustAnchors
трябва да е не- празно в
com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907) в
com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666)
в javax.mail.Service.connect(Service.java:317) в
javax.mail.Service.connect(Service.java:176) в
javax.mail.Service.connect(Service. java:125) в
javax.mail.Transport.send0(Transport.java:194) в
javax.mail.Transport.send(Transport.java:124)

person marioosh    schedule 05.01.2017

За моя случай не бях посочил напълно VM аргументи.

(Run Configurations.. > (under Apache Tomcat) any server > (x)= Arguments > VM arguments:)

Уверете се, че всички VM аргументи са настроени правилно.

person Poli    schedule 10.12.2019

избягах

sudo update-ca-certificates -f

за създаване на файл със сертификат и след това:

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

и след това променете командния ред за изпълнение на jar:

sudo java -cp xx.jar:lib/* co.com.ixxx.clixxxlarxa.Main
person NELSON RODRIGUEZ    schedule 06.12.2019

Имах същата грешка и проблемът не беше в конфигурирането на JDK, а просто грешен път към JKS файла във application.properties файл под trust-store: параметър, проверете отново дали пътят е правилен.

person Dimitar Dimitrov    schedule 21.08.2019

Трябва да добавите файла със сертификата към вашето хранилище за ключове на Java. Отидете на chrom, отворете уебсайта, запазете сертификата в txt формат

Отидете на cmd> keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias Root -import -file Trustedcaroot.txt

https://knowledge.digicert.com/solution/SO4085.html

Това проработи като чар

person Prashant    schedule 30.03.2020

Отговорът на Marquis of Lorne е точен, добавям малко информация за целите на отстраняването на грешки:

За отстраняване на грешки в този проблем (писах за него с повече подробности в тук) и разберете какво доверително хранилище се използва (или се опитва да използва), можете да добавите свойството javax.net.debug=all и след това филтрирайте регистрационните файлове за truststore. Можете също така да си поиграете със свойството javax.net.ssl.trustStore, за да посочите конкретен truststore. Например :


    java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/Another/path/to/cacerts -jar test_get_https-0.0.1-SNAPSHOT-jar-with-dependencies.jar https://www.calca.com.py 2>&1| grep -i truststore

person Gus Calca    schedule 06.11.2020

В моя случай основната причина за този проблем беше празно хранилище за доверие (беше хранилище за доверие на сървър на приложения). Когато добавих някакъв фиктивен сертификат x.509, тази грешка спря.

Команда за добавяне на сертификат в truststore спрямо keytool

keytool -import -alias dummy -keystore <path to keystore> -storepass <truststore password if any>
person Robin Mathur    schedule 24.05.2021