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

Я снабжен хранилищем jks по имени ABCC_client.store. Когда я импортирую это хранилище ключей в cacerts и попробую подключиться, он говорит «Нет такой ошибки алгоритма». PFA – стек

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 он работает.

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

Если вы используете Tomcat 6 и ранее, убедитесь, что пароль хранилища ключей и пароль ключа совпадают. Если вы используете Tomcat 7 и более поздние версии, убедитесь, что они одинаковые или что пароль ключа указан в файле server.xml .

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

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

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

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


Поскольку JDK 8u151 нет необходимости добавлять файлы политики. Вместо этого файлы политики юрисдикции JCE контролируются свойством Security crypto.policy . Установка unlimited разрешения позволяет использовать неограниченную криптографию JDK. Поскольку заметки о выпуске связаны с указанным выше состоянием, его можно установить Security.setProperty() или через файл java.security . Файл java.security также можно добавить, добавив в -Djava.security.properties=my_security.properties команду для запуска программы, как описано здесь .


Поскольку JDK 8u161 неограниченная криптография включена по умолчанию.

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

  • VBA ServerXMLHTTP запрос https с самозаверяющим сертификатом
  • Избегайте ввода пароля для ключей и подсказок для информации о DN
  • Игнорировать недопустимый самоподписанный сертификат ssl в node.js с https.request?
  • Как исправить ошибку «java.security.cert.CertificateException: нет альтернативных имен объектов»?
  • Возможно ли иметь сертификат SSL для IP-адреса, а не доменное имя?
  • Программно создавать сертификат X509 с использованием OpenSSL
  • Самоподписанный SSL-прием на Android
  • Как восстановить отсутствующий сертификат IIS Express SSL?
  • Последствия безопасности отключения CURLOPT_SSL_VERIFYHOST (libcurl / openssl)
  • Почему запросы Python игнорируют параметр проверки?
  • Как правильно импортировать самоподписанный сертификат в хранилище ключей Java, доступное для всех приложений Java по умолчанию?
  • Давайте будем гением компьютера.