Otrzymuję magazyn kluczy JKS o nazwie ABCC_client.store. Kiedy importuję ten magazyn kluczy do cacerts i próbuję podłączyć, pojawia się komunikat Brak takiego błędu algorytmu. PFA the stacktrace
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
at java.security.Provider$Service.newInstance(Provider.java:1245)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
... 32 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
at sun.security.provider.KeyProtector.recover(KeyProtector.java:311)
at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121)
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
at java.security.KeyStore.getKey(KeyStore.java:763)
at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:170)
at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at java.security.Provider$Service.newInstance(Provider.java:1221)
... 39 more
Ale jeśli używam tego magazynu kluczy niezależnie, tj. Bez dodawania go do cacerts, to działa.
Niektóre googlowania doprowadziły mnie do http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/, co oznacza, że hasło może być inne dla klucz i magazyn kluczy.
java
ssl
ssl-certificate
jks
Mrinal Bhattacharjee
źródło
źródło
Odpowiedzi:
Jeśli używasz Tomcat 6 i wcześniejszych, upewnij się, że hasło magazynu kluczy i hasło klucza są takie same. Jeśli używasz Tomcat 7 i nowszych, upewnij się, że są takie same lub że hasło klucza jest określone w
server.xml
pliku.źródło
keytool
podpowiedź poinformuje Cię, że naciśnięcie klawisza ENTER robi to automatycznie.)keytool
Szybka powie, że naciskając klawisz ENTER automatycznie używa tego samego hasła dla klucza jako kluczy. Możesz użyć tego samego hasła lub wybrać własne. Jeśli wybierzesz inne hasło niż hasło magazynu kluczy, będziesz musiał także określić hasło niestandardowe wserver.xml
pliku konfiguracyjnym.Hasło klucza prywatnego zdefiniowane w aplikacji / konfiguracji jest nieprawidłowe. Najpierw spróbuj zweryfikować hasło klucza prywatnego, zmieniając na inne w następujący sposób:
keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password
Powyższy przykład zmienia hasło z password na changeit. To polecenie powiedzie się, jeśli hasło klucza prywatnego to hasło.
źródło
-keypasswd -keystore storefile -alias somealias
i wpisać wszystko inne w monicie."keytool error: java.security.UnrecoverableKeyException: Cannot recover key"
pojawia się następujący błąd - Czy jest jakiś sposób, aby sprawdzić, jakie jest moje hasło klucza aliasu lub zmienić je bez znajomości starego?Aby nie mieć
Cannot recover key
wyjątku, musiałem zastosować rozszerzenie Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files do instalacji Javy, na której była uruchomiona moja aplikacja. Wersję 8 tych plików można znaleźć tutaj lub najnowszą wersję należy wyświetlić na tej stronie . Pobieranie zawiera plik wyjaśniający, jak zastosować pliki zasad.Od JDK 8u151 nie ma potrzeby dodawania plików strategii. Zamiast tego pliki zasad jurysdykcji JCE są kontrolowane przez właściwość Security o nazwie
crypto.policy
. Ustawienie tej opcji naunlimited
zezwala na używanie nieograniczonej kryptografii przez JDK. Ponieważ uwagi do wydania powiązane z powyższym stanem, można je ustawić zaSecurity.setProperty()
pomocąjava.security
pliku lub za jego pośrednictwem .java.security
Plik może być również dołączane do dodając-Djava.security.properties=my_security.properties
do polecenia, aby uruchomić program jak opisano tutaj .Od JDK 8u161 nieograniczona kryptografia jest domyślnie włączona.
źródło
Miałem ten sam błąd, kiedy zaimportowaliśmy klucz do magazynu kluczy, który został zbudowany przy użyciu 64-bitowej wersji OpenSSL. Kiedy zastosowaliśmy tę samą procedurę, aby zaimportować klucz do magazynu kluczy, który został zbudowany przy użyciu 32-bitowej wersji OpenSSL, wszystko poszło dobrze.
źródło
Sprawdź, czy hasło, którego używasz, jest poprawne, uruchamiając poniższe polecenie
keytool -keypasswd -new temp123 -keystore awsdemo-keystore.jks -storepass temp123 -alias movie-service -keypass changeit
Jeśli otrzymujesz poniższy błąd, Twoje hasło jest nieprawidłowe
źródło