Se me proporciona un almacén de claves jks llamado ABCC_client.store. Cuando importo este almacén de claves a cacerts e intento conectarlo, dice No hay tal error de algoritmo. PFA el 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
Pero si uso este almacén de claves de forma independiente, es decir, sin agregarlo a cacerts, funciona.
Algunas búsquedas en Google me llevaron a http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/ que dice que la contraseña podría ser diferente para la clave y el almacén de claves.
java
ssl
ssl-certificate
jks
Mrinal Bhattacharjee
fuente
fuente
Respuestas:
Si utiliza Tomcat 6 y versiones anteriores, asegúrese de que la contraseña del almacén de claves y la contraseña de la clave sean las mismas. Si usa Tomcat 7 y posterior, asegúrese de que sean iguales o que la contraseña de la clave esté especificada en el
server.xml
archivo.fuente
keytool
mensaje le dirá que presionar la tecla ENTER hace esto automáticamente).keytool
mensaje le dirá que presionar la tecla ENTER automáticamente usa la misma contraseña para la clave que el almacén de claves. Puede utilizar la misma contraseña o seleccionar una personalizada. Si selecciona una contraseña diferente a la contraseña del almacén de claves, también deberá especificar la contraseña personalizada en elserver.xml
archivo de configuración.La contraseña de la clave privada definida en su aplicación / configuración es incorrecta. Primero intente verificar la contraseña de la clave privada cambiando a otra de la siguiente manera:
keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password
El ejemplo anterior cambia la contraseña de contraseña a changeit. Este comando tendrá éxito si la contraseña de la clave privada era contraseña.
fuente
-keypasswd -keystore storefile -alias somealias
e ingresar todo lo demás en un mensaje."keytool error: java.security.UnrecoverableKeyException: Cannot recover key"
aparece el siguiente error: ¿Hay alguna forma de verificar cuál es la contraseña de mi clave de alias o de cambiarla sin conocer la anterior?Para no tener la
Cannot recover key
excepción, tuve que aplicar los archivos de política de jurisdicción de fuerza ilimitada de Java Cryptography Extension (JCE) a la instalación de Java que estaba ejecutando mi aplicación. La versión 8 de esos archivos se puede encontrar aquí o la última versión debe aparecer en esta página. . La descarga incluye un archivo que explica cómo aplicar los archivos de políticas.Desde JDK 8u151 no es necesario agregar archivos de política. En su lugar, los archivos de políticas de jurisdicción de JCE están controlados por una propiedad de seguridad llamada
crypto.policy
. Configurar eso paraunlimited
permitir que el JDK utilice criptografía ilimitada. Como las notas de la versión vinculadas al estado anterior, se puede configurar medianteSecurity.setProperty()
o mediante eljava.security
archivo. Eljava.security
archivo también se puede agregar agregando-Djava.security.properties=my_security.properties
al comando para iniciar el programa como se detalla aquí .Dado que JDK 8u161, la criptografía ilimitada está habilitada de forma predeterminada.
fuente
Tuve el mismo error cuando importamos una clave en un almacén de claves que se construyó con una versión OpenSSL de 64 bits. Cuando seguimos el mismo procedimiento para importar la clave a un almacén de claves que se creó con una versión OpenSSL de 32 bits, todo salió bien.
fuente
Verifique si la contraseña que está utilizando es la correcta ejecutando el siguiente comando
keytool -keypasswd -new temp123 -keystore awsdemo-keystore.jks -storepass temp123 -alias movie-service -keypass changeit
Si obtiene el siguiente error, su contraseña es incorrecta
fuente