Solución:
El problema aquí es el alias que usó al importar el certificado, que es similar al que usó al crear la tienda JKS. Simplemente cambie el alias y resolverá su problema. El documento fuente [1] debe corregirse en consecuencia.
[1] http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html
El enlace de su pregunta explica cómo crear un almacén de claves SSL para un servidor, que no es lo que desea hacer. Lo que hiciste fue:
- Crea un nuevo par de claves
- Agregar un certificado de confianza al almacén de claves
- Agregar otro certificado de confianza al almacén de claves
- Intente importar el certificado SSL del servidor como certificado para su par de claves
El paso 4 falla porque el certificado SSL se generó para un par de claves completamente diferente.
Los tres certificados son probablemente:
- El certificado SSL del servicio web
- El certificado CA que firmó el certificado SSL
- El certificado raíz que firmó la CA
Lo que debe hacer ahora es agregar un ancla de confianza a su almacén de confianza (de forma predeterminada: ${JAVA_HOME}/jre/lib/security/cacerts
), con el resultado de que su cliente acepta el certificado SSL del servicio web.
Por lo general, el servidor SSL envía toda la cadena, excepto el certificado raíz, al cliente durante el protocolo de enlace SSL. Esto significa que debe agregar el certificado raíz a su almacén de confianza:
keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias theCCARoot
Se necesitan pasos adicionales si el servicio web requiere autenticación de cliente SSL, pero nunca ha mencionado la autenticación de cliente, así que supongo que no es necesario.
En el 4 punto (donde está obteniendo un error: error de keytool: java.lang.Exception: las claves públicas en respuesta y el almacén de claves no coinciden) donde está importando el certificado, cambie el alias. El alias no debe ser npci_client_testore ya que ya se usa para el alias del almacén de claves.