Muszę zaimportować certyfikat do mojego magazynu kluczy JVM. Używam następujących:
keytool -import -alias daldap -file somecert.cer
więc prawdopodobnie musiałbym zmienić moje wywołanie na coś takiego:
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
Odpowiedzi:
Twój magazyn kluczy będzie w Twoim
JAVA_HOME---> JRE -->lib---> security--> cacerts
. Musisz sprawdzić, gdzie jest skonfigurowany Twój JAVA_HOME, prawdopodobnie jedno z tych miejsc,Komputer ---> Zaawansowane -> Zmienne środowiskowe ---> JAVA_HOME
Twoje pliki wsadowe uruchamiania serwera.
W poleceniu importu -keystore cacerts (podaj tutaj pełną ścieżkę do powyższego środowiska JRE zamiast po prostu mówić cacerts).
źródło
Lokalizacja magazynu kluczy
Każda komenda keytool ma
-keystore
opcję określania nazwy i lokalizacji trwałego pliku kluczy dla magazynu kluczy zarządzanego przez keytool. Magazyn kluczy jest domyślnie przechowywany w pliku o nazwie.keystore
w katalogu osobistym użytkownika, zgodnie z właściwością systemową „user.home”. Biorąc pod uwagę nazwę użytkownika uName, wartość właściwości „user.home” ma wartość domyślnąTak więc, jeśli nazwa użytkownika to „cathy”, domyślną wartością jest „user.home”
http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html
źródło
~/.keystore
pliku! Jeśli zostawiłem ten-keystore
parametr, nie mogłem ustalić, które domyślnekeytool
kierowanie na magazyn kluczy . Ciągle szukałem innegocacerts
gdzieś na maszynie. Nie spodziewałem się, że keytool będzie generowany~/.keystore
w katalogu domowym, ani że zostanie nazwany.keystore
zamiastcacerts
. Wypełniłeś puste miejsce, które ludzie Java powinni udokumentować! Dziękuję Ci!Mac OS X 10.12 z Javą 1.8:
$ JAVA_HOME / jre / lib / security
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
Stamtąd jest w:
Mam tam magazyn kluczy Cacerts.
Aby określić to jako opcję maszyny wirtualnej:
Nie mówię, że to poprawny sposób (dlaczego java nie wie, jak szukać w JAVA_HOME?), Ale to właśnie musiałem zrobić, aby działał.
źródło
Możesz go znaleźć w swoim katalogu „Home”:
W systemie Windows 7:
W systemie Linux (Ubuntu):
źródło
user.home
jest równa$HOMEDRIVE$HOMEPATH
ustawionej przez windows a nie$HOME
ustawionej przez cygwin gdzieHOMEDRIVE=C:
iHOMEPATH=\Users\[YOUR ACCOUNT]
To działa dla mnie:
Tylko dla Linuksa. Mój Solaris nie ma linku do odczytu. W końcu użyłem tego skryptu Perl:
źródło
Jak wspomniano w DimtryB, magazyn kluczy domyślnie znajduje się w katalogu użytkownika. Ale jeśli próbujesz zaktualizować
cacerts
plik, aby maszyna JVM mogła wybrać klucze, będziesz musiał zaktualizowaćcacerts
plik podjre/lib/security
. Możesz również wyświetlić klucze, wykonując polecenie,keytool -list -keystore cacerts
aby sprawdzić, czy Twój certyfikat został dodany.źródło
lib/security
automatycznie dodaje poprawną ścieżkę, jeśli podana jest tylko nazwa względna.-importcert
. Polecenie list wyświetla certyfikaty systemowe, ale polecenie importu generuje nowy plik w bieżącym katalogu.updatedb; locate cacerts
pomaga znaleźć lokalizacje instalacji plików cacerts.W Debianie, używając wersji openjdk "1.8.0_212", znalazłem cacerts tutaj:
Oczywiście byłoby przydatne, gdyby istniało standardowe polecenie, które wydrukowałoby tę ścieżkę.
źródło
Dla mnie, używając oficjalnego obrazu OpenJDK 12 Docker , lokalizacja magazynu kluczy Java była następująca:
źródło
keytool -import -file example.crt -alias exampleCA -keystore truststore.jks
użyjesz również parametru-keystore
... dość niejasne IMHO. I wreszcie: szukałem dokładnie tego problemu - i znalazłem to pytanie. Może inni wyrażają to samo.Napotkaliśmy ten problem na serwerze Tomcat działającym z katalogu jre, który został (prawie całkowicie) usunięty po automatycznej aktualizacji środowiska jre, tak że działające środowisko jre nie mogło już znaleźć jre ... / lib / security / cacerts, ponieważ już nie istniało.
Ponowne uruchomienie Tomcata (po zmianie konfiguracji na uruchamianie z innej lokalizacji jre) rozwiązało problem.
źródło
Oprócz wszystkich powyższych odpowiedzi:
Jeśli aktualizacja pliku cacerts w katalogu JRE nie pomaga, spróbuj zaktualizować go w JDK.
C: \ Program Files \ Java \ jdk1.8.0_192 \ jre \ lib \ security
źródło