Вызывается: 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/, в котором говорится, что пароль может меня различить ключ и хранилище ключей.
- Java SSL: как отключить проверку имени хоста
- Сертификаты SSL привязаны к IP-адресу серверов?
- VBA ServerXMLHTTP запрос https с самозаверяющим сертификатом
- Создавать самостоятельно подписанный сертификат на лету
- javax.net.ssl.SSLPeerUnverifiedException: имя хоста не соответствует теме сертификата, предоставленной партнером
- Отключить предупреждение безопасности для сайтов Intranet
- Java: загрузка SSL Keystore через ресурс
- создать надежный самоподписанный SSL-сертификат для localhost (для использования с Express / Node)
- Что мне нужно сделать, чтобы заставить Internet Explorer 8 принять самоподписанный сертификат?
- Ошибка: невозможно проверить первый сертификат в nodejs
- Как добавить самозаверяющий сертификат в качестве исключения в Chrome?
- Как сказать Maven игнорировать ошибки SSL (и доверять всем сертификатам)?
- проверка сертификата сервера не удалась. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
Если вы используете 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, все прошло отлично.