style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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)

Imagen de ezamudio

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

import groovyx.net.ws.WSClient

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()

Imagen de ezamudio

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

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">