Ich werde mit einem jks-Keystore namens ABCC_client.store geliefert. Wenn ich diesen Schlüsselspeicher in cacerts importiere und versuche, ihn zu verbinden, wird "Kein solcher Algorithmusfehler" angezeigt. PFA die Stapelverfolgung
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
Aber wenn ich diesen Keystore unabhängig verwende, dh ohne ihn zu cacerts hinzuzufügen, funktioniert er.
Ein bisschen googeln führte mich zu http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/, wo steht, dass das Passwort für mich anders sein könnte der Schlüssel und der Schlüsselspeicher.
java
ssl
ssl-certificate
jks
Mrinal Bhattacharjee
quelle
quelle
Antworten:
Wenn Sie Tomcat 6 und früher verwenden, stellen Sie sicher, dass das Keystore-Kennwort und das Schlüsselkennwort identisch sind. Wenn Sie Tomcat 7 und höher verwenden, stellen Sie sicher, dass sie identisch sind oder dass das Schlüsselkennwort in der
server.xml
Datei angegeben ist.quelle
keytool
Eingabeaufforderung darüber informiert, dass das Drücken der ENTER-Taste dies automatisch für Sie erledigt.)keytool
Eingabeaufforderung zeigt an, dass beim Drücken der ENTER-Taste automatisch dasselbe Kennwort für die Taste wie für den Keystore verwendet wird. Es steht Ihnen frei, dasselbe Passwort zu verwenden oder ein benutzerdefiniertes Passwort auszuwählen. Wenn Sie ein anderes Kennwort als das Keystore-Kennwort auswählen, müssen Sie auch das benutzerdefinierte Kennwort in derserver.xml
Konfigurationsdatei angeben .Das in Ihrer App / Konfiguration definierte Kennwort für den privaten Schlüssel ist falsch. Überprüfen Sie zunächst das Kennwort für den privaten Schlüssel, indem Sie wie folgt zu einem anderen wechseln:
Im obigen Beispiel wird das Kennwort von Kennwort in Änderung geändert. Dieser Befehl ist erfolgreich, wenn das Kennwort für den privaten Schlüssel das Kennwort war.
quelle
-keypasswd -keystore storefile -alias somealias
und alles andere in eine Eingabeaufforderung einzugeben."keytool error: java.security.UnrecoverableKeyException: Cannot recover key"
Gibt es eine Möglichkeit, das Kennwort meines Alias-Schlüssels zu überprüfen oder zu ändern, ohne das alte zu kennen?Um die
Cannot recover key
Ausnahme nicht zu haben , musste ich die JCE-Richtliniendateien (Java Cryptography Extension) mit unbegrenzter Stärke auf die Installation von Java anwenden, auf der meine Anwendung ausgeführt wurde. Version 8 dieser Dateien finden Sie hier oder die neueste Version sollte auf dieser Seite aufgeführt sein . Der Download enthält eine Datei, in der erläutert wird, wie die Richtliniendateien angewendet werden.Seit JDK 8u151 müssen keine Richtliniendateien hinzugefügt werden. Stattdessen werden die JCE-Zuständigkeitsrichtliniendateien von einer aufgerufenen Sicherheitseigenschaft gesteuert
crypto.policy
. Wenn Sie dies so einstellen, dassunlimited
das JDK unbegrenzte Kryptografie verwenden kann. Wie in den oben genannten Versionshinweisen angegeben, kann dies überSecurity.setProperty()
oder über diejava.security
Datei festgelegt werden. Diejava.security
Datei kann auch durch Hinzufügen-Djava.security.properties=my_security.properties
zum Befehl zum Starten des Programms angehängt werden, wie hier beschrieben .Seit JDK 8u161 ist die unbegrenzte Kryptografie standardmäßig aktiviert.
quelle
Ich hatte den gleichen Fehler, als wir einen Schlüssel in einen Keystore importierten, der mit einer 64-Bit-OpenSSL-Version erstellt wurde. Als wir das gleiche Verfahren befolgten, um den Schlüssel in einen Keystore zu importieren, der mit einer 32-Bit-OpenSSL-Version erstellt wurde, ging alles in Ordnung.
quelle
Überprüfen Sie, ob das von Ihnen verwendete Kennwort korrekt ist, indem Sie den folgenden Befehl ausführen
Wenn der folgende Fehler auftritt, ist Ihr Passwort falsch
quelle