Importar clave privada y certificado en la Java keystore mediante keytool
Buena tarde tengan todos ustedes:
Tengo un archivo PFX, el cuál me lo envió un proveedor para autenticarme a un web services. El primer paso que realizé fué exportar la clave privada y el certificado a archivos PEM respectivamente, esto mediante OpenSSL :
openssl pkcs12 -in filename.pfx -nocerts -out key.pem
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
Necesito importar tanto la llave privada como el certificado a la Java keystore y generar un archivo JKS. ¿ Esto como se realiza con la herramienta keytool ?
Gracias por la ayuda
Saludos
- Inicie sesión o regístrese para enviar comentarios
unable to find valid certification path to requested target
Ya logré generar el archivo JKS con lo siguiente:
openssl pkcs12 -in cert.pfx -out cert.pem
openssl pkcs12 -export -in cert.pem -out cert.p12 -name "MiCertificado"
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore MiAlmacen.jks -srckeystore cert.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias "MiCertificado"
Hasta aqui todo ok. Pero al intentar realizar la conexión al webservices obtengo el siguiente error:
"unable to find valid certification path to requested target"
¿ Que estará pasando ? Gracias por sus respuestas.
Saludos
Tamaño de tu KeyStore
Verifica que el tamaño de tu KeyStore no sea de 0Kb
otro consejo, quizas en la importacion la contraseña no sea valida por lo que nadamas se agrego la lave publica... intenta listar tus llaves del KS a ver si tienes e par (eso lo puedes hacer con
keytool -list -v -keystore MiAlmacen.jks
)Lo estas leyendo?
OK ya creaste tu propio keystore "MiAlmacen.jks". No das información alguna de cómo te conectas al "webservices". Seguramente tu problema es que no estás agregando tu keystore al proveedor de seguridad que usa tu cliente de web service. La manera en que configuras eso depende de qué cliente de web service estás usando (o cómo lo generaste), aunque por lo general es un SSL Context.
Por ejemplo si es con Axis 2, escribí en mi blog precisamente de eso hace unos meses.
Conexión WS mediante Groovy
Map<String, String> mapClient = ["https.keystore":"",
"https.keystore.pass":"",
"https.truststore":"d:/Certificado/MiAlmacen.jks",
"https.truststore.pass":"123456"]
def proxy = new WSClient("https://algunsitio/Servicio.svc?wsdl", this.class.classLoader)
proxy.setSSLProperties(mapClient)
proxy.initialize()
cert raíz
Tal vez el certificado del sitio al que te quieres conectar no es auto-firmado sino que trae firma de otra entidad. En ese caso necesitas el certificado de esa entidad (que los números de serie coincidan).
Si el cert del sitio es el 12345 y está firmado por el 12346, necesitas tener en tu keystore dos certificados: el 12345 y el 12346. Y si el 12346 estuviera firmado por el 12347 entonces necesitas tener ese también. En resumen, necesitas toda la cadena de confianza (desde el certificado del sitio al que te conectas, hasta el certificado raíz). Normalmente son 2 pasos pero tal vez sean más.
Lo tomaré en cuenta ezamudio ...
Lo tomaré en cuanta ezamudio. Voy a checar esto e informo el resultado. Gracias