Мне предоставлено хранилище ключей 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, оно работает.
Некоторый поиск в Google привел меня к http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/, в котором говорится, что пароль может быть другим для ключ и хранилище ключей.
java
ssl
ssl-certificate
jks
Мринал Бхаттачарджи
источник
источник
Ответы:
При использовании Tomcat 6 и более ранних версий убедитесь, что пароль хранилища ключей и пароль ключа совпадают. При использовании Tomcat 7 и более поздних версий убедитесь, что они совпадают или что ключевой пароль указан в
server.xml
файле.источник
keytool
подсказке будет сказано, что нажатие клавиши ENTER сделает это за вас автоматически.)keytool
Подсказка покажет вам , что при нажатии клавиши ВВОД автоматически использует один и тот же пароль для ключа в хранилище ключей. Вы можете использовать тот же пароль или выбрать собственный. Если вы выберете пароль, отличный от пароля хранилища ключей, вам также потребуется указать собственный пароль вserver.xml
файле конфигурации.Пароль закрытого ключа, указанный в вашем приложении / конфигурации, неверен. Сначала попробуйте проверить пароль закрытого ключа, изменив его на другой следующим образом:
keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password
В приведенном выше примере пароль меняется с пароля на changeit. Эта команда будет успешной, если паролем секретного ключа был пароль.
источник
-keypasswd -keystore storefile -alias somealias
и ввести все остальное в командной строке."keytool error: java.security.UnrecoverableKeyException: Cannot recover key"
есть ли способ проверить, какой у меня пароль ключа псевдонима, или изменить его, не зная старого?Чтобы не было
Cannot recover key
исключения, мне пришлось применить файлы политики юрисдикции неограниченной надежности Java Cryptography Extension (JCE) к установке 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, все прошло нормально.
источник
Проверьте, правильный ли пароль вы используете, выполнив команду ниже
keytool -keypasswd -new temp123 -keystore awsdemo-keystore.jks -storepass temp123 -alias movie-service -keypass changeit
Если вы получаете сообщение об ошибке ниже, значит, ваш пароль неверен
источник