Resuelva las claves públicas en la respuesta y el almacén de claves no coincide con el error en Java
-
Descripción del error, causas y posibles soluciones al error
Las claves públicas en respuesta y el almacén de claves no coinciden
-
Resuelva el error
Public Keys in Reply and Keystore Don't Match
en Java
El tutorial de hoy analiza el error keytool error: java.lang.Exception: las claves públicas en respuesta y el almacén de claves no coinciden
. También destaca las posibles razones que dan lugar a este error.
Además, aprenderemos sobre las diferentes soluciones que podemos usar para corregir este error.
Descripción del error, causas y posibles soluciones al error Las claves públicas en respuesta y el almacén de claves no coinciden
Intentaremos acceder al servicio web alojado en el puerto 443. El proveedor del servicio compartió tres certificados: ABCD.cer
, CCA_Certificate.cer
y CA_Certificate.cer
.
Estamos obligados a agregarlos todos al KeyStore mediante la creación de una cadena de formularios para la comunicación SSL. Los pasos que seguimos de este artículo se dan a continuación en orden secuencial.
-
keytool -keystore npci_keystore.jks -genkey -alias npci_client
-
keytool -importación -keystore npci_keystore.jks -archivo CA_Certificate.cer -alias CARoot
-
keytool -importación -keystore npci_keystore.jks -archivo CCA_Certificate.cer -alias CCARoot
-
keytool -importación -keystore npci_keystore.jks -archivo ABCD.cer -alias npci_client
En este punto, recibimos el error que dice “keytool error: java.lang.Exception: las claves públicas en respuesta y el almacén de claves no coinciden”. ¿De qué se trata este error? ¿Por qué tenemos este problema?
Tenemos este problema por diferentes razones que se enumeran a continuación:
- Obtenemos este error cuando intentamos generar un certificado con un par de claves diferente.
- Este error ocurre si hemos utilizado el mismo alias al importar un certificado y crear la tienda JKS.
- A veces, la instalación de certificados en el orden incorrecto también genera este error.
- También analizamos este problema si falta el certificado de la CA raíz en la cadena.
Ahora, el punto es cómo erradicarlo. Veámoslo en el siguiente apartado.
Resuelva el error Public Keys in Reply and Keystore Don't Match
en Java
En nuestro escenario, el enlace que estábamos usando guía cómo podemos crear un almacén de claves SSL para el servidor, que no es lo que queremos lograr. Lo que hicimos fue comenzar con la creación de un nuevo par de claves.
Luego, agregamos un certificado confiable a KeyStore, agregamos otro certificado confiable a KeyStore y luego intentamos importar el certificado SSL del servidor para nuestro par de claves.
En este punto, estamos fallando porque el certificado SSL generado es para un par de claves completamente diferente. Los tres certificados que tenemos, incluyen lo siguiente:
- El certificado SSL del servicio web
- Un certificado de CA que firmó el certificado SSL
- Un certificado raíz que firmó una CA
Ahora, tenemos que agregar el ancla de confianza a nuestro TrustStore. Por defecto es ${JAVA_HOME}/jre/lib/security/cacerts
, de forma que nuestro cliente acepta el certificado SSL de un servicio web.
Recuerde, durante el protocolo de enlace SSL, el servidor SSL envía una cadena completa, excluyendo el certificado raíz, a un cliente. Por lo tanto, debemos agregar un certificado raíz a nuestro almacén de confianza de la siguiente manera.
keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias CCARoot
Algunos pasos adicionales son esenciales si un servicio web necesita autenticación de cliente SSL. Si nunca hemos mencionado la autenticación del cliente, entonces esto no es necesario.
Así es como se soluciona el error en nuestro caso, pero hay otras soluciones que podemos probar si nos encontramos en una situación diferente.
- Necesitamos generar el certificado nuevamente usando el mismo par de claves real para eliminar este error.
- Hay algunas situaciones en las que el error se debe al uso del mismo alias al crear el almacén JKS e importar el certificado. Luego, necesitamos cambiar el alias para resolver el error.
- Asegúrese de que el certificado de la CA raíz no falte en la cadena.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase