Próbuję skonfigurować pocztę e-mail w witrynie Jenkins / Hudson i ciągle otrzymuję błąd:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
Widziałem sporo informacji online na temat błędu, ale nie udało mi się nic zrobić. Używam JDK firmy Sun w systemie Fedora Linux (nie w OpenJDK).
Oto kilka rzeczy, których próbowałem. Próbowałem postępować zgodnie z radami zawartymi w tym poście , ale kopiowanie cacertów z systemu Windows na moją skrzynkę Fedory obsługującą Jenkins nie działało. Próbowałem postępować zgodnie z tym przewodnikiem , próbując skonfigurować Gmaila jako mój serwer SMTP, ale też nie działał. Próbowałem także ręcznie pobrać i przenieść te pliki cacert i przenieść je do mojego folderu Java, używając różnych poleceń w tym przewodniku .
Jestem otwarty na wszelkie sugestie, ponieważ obecnie utknąłem. Mam go do pracy z serwerem Windows Hudson, ale walczę z Linuksem.
${CATALINA_HOME}\conf
ale sięCATALINA_HOME
nie ustawiałem, więc Tomcat szukał\conf
go.W Ubuntu 18.04 ten błąd ma inną przyczynę (JEP 229, przejście z
jks
domyślnego formatu magazynu kluczy dopkcs12
formatu, a generowanie plików Debiana przy użyciu domyślnego formatu dla nowych plików) i obejście :Status (2018-08-07) , błąd został naprawiony w Ubuntu Bionic LTS 18.04.1 i Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-certyfikaty-java z kosmicznego (20180413ubuntu1)
🗹 Ubuntu 1769013: Proszę połączyć ca-certyfikaty-java 20180413 (główne) z niestabilnej Debiana (główna)
🗹 Ubuntu 1739631: Świeża instalacja z JDK 9 nie może korzystać z wygenerowanego pliku kluczy cacerts PKCS12
🗹 docker -library 145: 9-jdk image ma problemy z SSL
🗹 Debian 894979: ca-certyfikaty-java: nie działa z OpenJDK 9, aplikacje nie działają z InvalidAlametermParameterException: parametr trustAnchors musi być niepusty
🗹 JDK-8044445: JEP 229: Domyślnie twórz magazyny kluczy PKCS12
🖺 JEP 229: Domyślnie twórz magazyny kluczy PKCS12
Jeśli problem nadal występuje po tym obejściu, możesz upewnić się, że faktycznie uruchomiłeś właśnie naprawioną dystrybucję Java.
Możesz ustawić alternatywy Java na „auto” za pomocą:
Możesz dokładnie sprawdzić wykonywaną wersję Java:
Istnieją również alternatywne obejścia, ale mają one swoje skutki uboczne, które będą wymagały dodatkowej konserwacji w przyszłości, bez żadnych korzyści.
Kolejnym najlepszym obejściem jest dodanie wiersza
do plików
cokolwiek istnieje.
Trzecim najmniej problematycznym obejściem jest zmiana wartości
do
w plikach
cokolwiek istnieje, a następnie usuń
cacerts
plik i ponownie wygeneruj go w sposób opisany w ostatnim wierszu skryptu obejścia u góry postu.źródło
To rozwiązało problem dla mnie na Ubuntu:
(znaleziono tutaj: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760 )
ca-certificates-java
nie jest zależnością w Oracle JDK / JRE, więc należy to jawnie zainstalować.źródło
W Ubuntu 18.04 główną przyczyną jest konflikt między openjdk-11-jdk (który jest domyślny) i innymi pakietami zależnymi od niego. Zostało to już naprawione w Debianie i wkrótce zostanie dołączone do Ubuntu. Tymczasem najprostszym obejściem jest obniżenie java do wersji 8. Inne stosowane rozwiązania
ca-certificates-java
są znacznie bardziej skomplikowane.Najpierw usuń konfliktowe pakiety:
Sprawdź, czy pomyślnie usunąłeś wszystkie powiązane pakiety, wykonując:
System wyświetli monit o brak Java do skonfigurowania , w przeciwnym razie to obejście nie powiedzie się .
Następnie zainstaluj ponownie wymagane pakiety:
źródło
openjdk-8-jdk
pakiet, usunąć/etc/ssl/certs/java/cacerts
plik i uruchomić,sudo update-ca-certificates -f
który jestpkcs12
rundowym sposobem przełączania ze sformatowanego pliku cacerts najks
sformatowany, jak opisano w innym miejscu tego wątku.EJP w zasadzie odpowiedział na pytanie (i zdaję sobie sprawę, że ma to zaakceptowaną odpowiedź), ale właśnie poradziłem sobie z tą przypadkową gotcha i chciałem uwiecznić moje rozwiązanie.
Miałem
InvalidAlgorithmParameterException
błąd na hosted Jira serwerze, który miałem wcześniej skonfigurowana dla dostępu SSL-only. Problem polegał na tym, że skonfigurowałem swój magazyn kluczy w formacie PKCS # 12, ale mój magazyn zaufania był w formacie JKS.W moim przypadku edytowałem
server.xml
plik, aby określić typ pliku kluczy do PKCS, ale nie określiłem typu pliku zaufanego certyfikatu, więc domyślnie jest to dowolny typ pliku kluczy. Określenie typu truststoreType jawnie, ponieważ JKS go dla mnie rozwiązał.źródło
Natrafiłem na to rozwiązanie z posta na blogu Natrafiłem Naprawianie problemu trustAnchors podczas uruchamiania OpenJDK 7 na OS X :
Naprawianie problemu trustAnchors podczas uruchamiania OpenJDK 7 w OS X. Jeśli używasz OpenJDK 7 w OS X i widziałeś ten wyjątek:
Istnieje prosta poprawka. Wystarczy połączyć w tym samym pliku cacerts, którego używa JDK 1.6 firmy Apple:
Musisz to zrobić dla każdej zainstalowanej wersji OpenJDK. Po prostu zmień
-v 1.7
wersję, którą chcesz naprawić. Uruchom,/usr/libexec/java_home -V
aby zobaczyć wszystkie zainstalowane środowiska JRE i JDK.Być może faceci OpenJDK mogliby dodać to do swoich skryptów instalacyjnych.
źródło
security
folderze (blacklisted.certs
,local_policy.jar
, iUS_export_policy.jar
) for Java, aby być szczęśliwym.cacerts
podjre
katalogu?W systemie Ubuntu 12.10 (Quetzal) lub nowszym certyfikaty są przechowywane w pakiecie ca-certyfikaty-java . Użycie
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
spowoduje podniesienie ich niezależnie od używanego JDK.źródło
update-ca-certificates -f
ręcznie, aby wypełnić plik cacertsWłaśnie ten problem napotkałem na OS X, używając JDK 1.7 po aktualizacji do OS X 10.9 (Mavericks). Poprawką, która działała dla mnie, była po prostu ponowna instalacja Java w wersji Apple, dostępnej pod adresem http://support.apple.com/kb/DL1572 .
źródło
Pobiegłem
aby utworzyć plik certyfikatu, a następnie:
Wróciłem do biznesu, dzięki chłopaki. Szkoda, że nie zostało uwzględnione w instalacji, ale w końcu tam dotarłem.
źródło
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**
, dostajęsudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
sudo update-ca-certificates -f
na Debianie jessie zopenjdk-8-jre-headless
jessie-backports, o ileca-certificates-java
jest zainstalowany. Myślę, że kolejność instalacji ma znaczenie (ca-certificates-java
może to powodować JRE później , ponieważ ten ostatni nie ma żadnych wyzwalaczy dla backportowanej Java 8).sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
bez gwiazdek **update-ca-certificates -f
jest rzeczą, która to naprawiła. Nie potrzebowałem drugiego poleceniaBłąd informuje, że system nie może znaleźć magazynu zaufanych certyfikatów na ścieżce dostarczonej z parametrem
javax.net.ssl.trustStore
.W systemie Windows skopiowałem
cacerts
plik zjre/lib/security
katalogu instalacyjnego Eclipse (to samo miejsce coeclipse.ini
plik) i dodałem następujące ustawieniaeclipse.ini
:Miałem pewne problemy ze ścieżką do cacerts (zmienna środowiskowa% java_home% jest jakoś nadpisana), więc skorzystałem z tego trywialnego rozwiązania.
Chodzi o to, aby podać poprawną ścieżkę do pliku zaufanych certyfikatów - najlepiej byłoby użyć względnego. Możesz także użyć ścieżki bezwzględnej.
Aby upewnić się, że typ sklepu to JKS, uruchom następującą komendę:
źródło
Usunięcie pakietu ca-certyfikaty-java i ponowne zainstalowanie go działało dla mnie ( Ubuntu MATE 17.10 (Artful Aardvark)).
Dziękujemy, jdstrand: Komentarz 1 do błędu 983302, Re: ca-certyfikaty-java nie instalują cacertów Java na Oneiric Ocelot .
źródło
Miałem wiele problemów z bezpieczeństwem po aktualizacji do OS X 10.9 (Mavericks):
trustAnchors
parametr musi być niepustyZastosowałem tę aktualizację Java i naprawiłem wszystkie moje problemy: http://support.apple.com/kb/DL1572?viewlocale=en_US
źródło
Oczekiwałem takich rzeczy, ponieważ używam alternatywnej JVM w moim Talend Open Studio (wsparcie w tej chwili istnieje tylko do JDK 1.7). Używam 8 do celów bezpieczeństwa ... w każdym razie
Zaktualizuj swój magazyn certyfikatów:
następnie
dodaj nową wartość do parametrów inicjalizacji
Dla mnie drugi wpis zadziałał. Myślę, że w zależności od wersji Talend Open Studio / TEnt + JVM ma inną nazwę parametru, ale szuka tego samego pliku kluczy.
źródło
javax.net.ssl.trustAnchors
? Nie jest to wymienione w dokumentacji JSSE.Dla mnie było to spowodowane brakiem zaufanegoCertEntry w magazynie zaufania.
Aby przetestować, użyj:
To daje mi:
Mimo że mój PrivateKeyEntry zawiera CA , musiał zostać zaimportowany osobno :
Importuje certyfikat, a następnie ponowne uruchomienie
keytool -list -keystore keystore.jks
daje teraz:Teraz ma trustCertEntry, a Tomcat rozpocznie się pomyślnie.
źródło
Niektórzy dostawcy OpenJDK spowodowali to, że pusty
cacerts
plik był dystrybuowany wraz z plikiem binarnym. Błąd wyjaśniono tutaj: https://github.com/AdoptOpenJDK/openjdk-build/issues/555Możesz skopiować do
adoptOpenJdk8\jre\lib\security\cacerts
pliku ze starej instalacji, takiej jakc:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts
.Wersja buggy AdoptOpenJDK to https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
źródło
Jeśli doświadczasz tego na Ubuntu z JDK9 i Maven, możesz dodać tę opcję JVM - najpierw sprawdź, czy ścieżka istnieje:
Jeśli brakuje pliku, spróbuj zainstalować ca-certyfikaty-java, jak ktoś zauważył:
źródło
Miałem ten komunikat o błędzie w Javie 9.0.1 w systemie Linux. Było to spowodowane znanym błędem JDK, w którym plik cacerts jest pusty w pakiecie binarnym .tar.gz (pobrany z http://jdk.java.net/9/ ).
Zobacz akapit „znane problemy” w informacjach o wersji JDK 9.0.1 , mówiąc: „TLS nie działa domyślnie w OpenJDK 9”.
W Debianie / Ubuntu (i prawdopodobnie innych pochodnych) prostym obejściem jest zastąpienie pliku cacerts plikiem z pakietu „ca-certyfikaty-java”:
W Red Hat Linux / CentOS możesz zrobić to samo z pakietem „ca-certyfikaty”:
źródło
Miałem ten problem podczas próby korzystania z Maven 3 po aktualizacji z Ubuntu 16.04 LTS (Xenial Xerus) do Ubuntu 18.04 LTS (Bionic Beaver).
Sprawdzanie / usr / lib / jvm / java-8-oracle / jre / lib / security wykazało, że mój plik cacerts był dowiązaniem symbolicznym
/etc/ssl/certs/java/cacerts
.Miałem też podejrzanie nazwany plik
cacerts.original
.Zmieniłem nazwę
cacerts.original
nacacerts
i to rozwiązało problem.źródło
cacerts.original
Plik był wjks
formacie i został wygenerowany z Ubuntu 16.04 Java 8, który używany ten format jako domyślnego.cacerts
Plik był wpkcs12
formacie, generowanej przez Ubuntu 18.04 Java 10, który wykorzystuje ten format jako domyślnego. Jak wyjaśniono w innym miejscu tego wątku, nowy format wymaga podania hasła do pliku wykonywalnego. Ale tak długo, jak albo wygenerujesz nowy pustyjks
cacerts
plik, albo skopiujesz stary, następny proces generowania plików cacerts opróżnia istniejący plik i wypełnia go certyfikatami CA z systemu plików.Zetknąłem się z tym również w systemie OS X po aktualizacji OS X 10.9 (Mavericks), kiedy używana była stara Java 6 i próbowałem uzyskać dostęp do adresu URL HTTPS. Naprawą była odwrotność Petera Kriena; Musiałem skopiować
cacerts
z przestrzeni 1.7 do lokalizacji połączonej wersją 1.6:źródło
W moim przypadku plik JKS użyty w aplikacji klienckiej został uszkodzony. Utworzyłem nowy i zaimportowałem w nim certyfikaty SSL serwera docelowego. Następnie użyłem nowego pliku JKS w aplikacji klienckiej jako magazynu zaufania, takiego jak:
Źródło: Java SSL i magazyn kluczy certyfikatów
Używam narzędzia (KeyStore Explorer) do tworzenia nowego JKS. Możesz pobrać go z tego linku, KeyStore Explorer .
źródło
Ten błąd może również wystąpić po uaktualnieniu do wersji Spring Boot 1.4.1 (lub nowszej), ponieważ przynosi on Tomcat 8.5.5 jako część jego zależności.
Problem wynika ze sposobu, w jaki Tomcat radzi sobie ze sklepem zaufania. Jeśli zdarzyło Ci się określić lokalizację magazynu zaufanych certyfikatów jako taką samą jak plik kluczy w konfiguracji Spring Boot, prawdopodobnie otrzymasz
trustAnchors parameter must be non-empty
komunikat podczas uruchamiania aplikacji.Po prostu usuń
server.ssl.trust-store
konfigurację, chyba że wiesz, że jej potrzebujesz, w takim przypadku zapoznaj się z poniższymi linkami.Następujące problemy zawierają więcej szczegółów na temat problemu:
źródło
Napotkałem ten problem z sdkmanager zestawu SDK systemu Android. Dla mnie to rozwiązanie zadziałało:
/usr/lib/jvm/java-8-oracle/jre/lib/security/
cacert
zcacert.original
cacert
Plik był malutki (22B). Zainstalowałemoracle-java8-installer
zppa:webupd8team/java
(zgodnie z tym podręcznikiem: https://docs.nativescript.org/start/ns-setup-linux ).źródło
Dla przypomnienia, żadna z odpowiedzi tutaj nie działała dla mnie. Moja kompilacja Gradle zaczęła zawodzić w tajemniczy sposób z tym błędem, nie mogąc pobrać HEAD z Maven central dla konkretnego pliku POM .
Okazało się, że JAVA_HOME ustawiłem na moją osobistą kompilację OpenJDK, którą zbudowałem do debugowania problemu z javac. Powrót do JDK zainstalowanego w moim systemie naprawił.
źródło
W systemie Red Hat Linux problem został rozwiązany przez zaimportowanie certyfikatów do
/etc/pki/java/cacerts
.źródło
Musisz dodać powyższe dwa wiersze do swojego kodu. Nie można znaleźć magazynu zaufania.
źródło
java -Djavax.net.ssl.trustStore=/tmp/cacerts ...
lub jeśli chcesz ustawić je globalnie dla wszystkich programów uruchamianych z JDK, dodaj wiersz domanagement.properties
pliku JDK .Napotkałem ten problem podczas uruchamiania konkretnego pakietu Androida do testowania na Ubuntu 14.04 (Trusty Tahr). Dwie rzeczy działały dla mnie, jak sugeruje shaheen:
źródło
Żadne z rozwiązań, które znalazłem w Internecie, nie działało, ale zmodyfikowana wersja odpowiedzi Petera Kriena wydaje się działać.
Najpierw znajdź folder Java, uruchamiając
/usr/libexec/java_home
. Dla mnie była to1.6.0.jdk
wersja. Następnie przejdź do jegolib/security
podfolderu (dla mnie/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security
).Następnie usuń
cacerts
plik, jeśli już istnieje, i wyszukaj go w systemie za pomocąsudo find / -name "cacerts"
. Znaleziono dla mnie wiele elementów, w wersjach Xcode lub innych zainstalowanych przeze mnie aplikacjach, ale także w/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
których wybrałem.Użyj tego pliku i stwórz do niego dowiązanie symboliczne (wcześniej w folderze Java)
sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
, i powinno działać.Mam zarówno - Java z pobrania Apple 2017-001 ( https://support.apple.com/kb/dl1572 - Zakładam, że stąd są prawidłowe certyfikaty) i Oracle zainstalowany na Mac OS X 10.12 (Sierra) .
źródło
na Ubuntu 14.04 z openjdk 11 z ppa: openjdk-r / ppa to zadziałało dla mnie:
w java.security zmień typ magazynu kluczy na
następnie:
gdy sprawdzasz, czy zadziałało, upewnij się, że nie używasz demona ze starą
--no-daemon
javą nadal działającą (np. opcja gradle)ten błąd opisuje wszystko ładnie i pomoże ci zrozumieć, co się dzieje https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631
źródło
W systemie Ubuntu 18.04 musiałem używać OpenJDK 1.7 do obsługi starego projektu. Pobrałem pakiet binarny. Ale kiedy wykonałem na nim skrypt, dostałem ten sam błąd.
Rozwiązaniem było usunięcie
cacerts
pliku pobranego JDK zjre/lib/security
folderu, a następnie utworzenie go jako dowiązania symbolicznego docacerts
pliku systemowego w/etc/ssl/certs/java/
:sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts
źródło
Niewielka szansa, że pomoże to każdemu, ale .... dla każdego, kto korzysta z Java 8 z Docker Image na Raspberry Pi (przy użyciu procesora AMD) Dostałem następujący plik Docker do zbudowania i uruchomienia dla mnie pomyślnie
źródło