Подтвердить что ты не робот

Вызывается: java.security.UnrecoverableKeyException: невозможно восстановить ключ

Я снабжен хранилищем jks по имени ABCC_client.store. Когда я импортирую это хранилище ключей в cacerts и попробую подключиться, он говорит "Нет такой ошибки алгоритма". PFA 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

Но если я использую это хранилище ключей независимо от того, не добавляя его в cacerts, он работает.

Некоторые поисковые запросы привели меня к http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/, в котором говорится, что пароль может отличаться для ключа и хранилища ключей.

4b9b3361

Ответ 1

убедитесь, что пароль KeyStore и Keypassword совпадают.

Ответ 2

Пароль секретного ключа, определенный в вашем приложении /config, неверен. Сначала попробуйте проверить пароль секретного ключа, перейдя на другой:

keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password

В приведенном выше примере изменяется пароль с паролем на changeit. Эта команда будет успешной, если пароль секретного ключа был паролем.

Ответ 3

У меня была такая же ошибка, когда мы импортировали ключ в хранилище ключей, которое было создано с использованием 64-битной версии OpenSSL. Когда мы выполнили ту же процедуру, чтобы импортировать ключ в хранилище ключей, которое было построено с использованием 32-разрядной версии OpenSSL, все пошло нормально.

Ответ 4

Чтобы исключить исключение Cannot recover key, я должен был применить файлы политики юрисдикции по неограниченной силе Java (JCE) Unlimited Strength для установки Java, на котором выполнялось мое приложение. Версию 8 этих файлов можно найти здесь или последняя версия должна быть указана на этой страницы. Загрузка включает файл, в котором объясняется, как применять файлы политики.