2011-06-06 19 views
5

Tengo un código de Java que necesita un almacén de claves y tengo el archivo privateKey.pem y bank.cer. La clave privada sería firmar un valor a bank y bank.cer para verificar la respuesta de los bancos. No puedo encontrar la manera de ponerlos en un almacén de claves para que mi código funcione.Crear un almacén de claves desde una clave privada y una clave pública

¿Se puede hacer con keytool?

+0

Creo que sería bueno si pudiera proporcionar lo que ha intentado hasta ahora. – musiKk

+0

He intentado importar con keytool pero importa como trustedCertEntry, pero me gustaría que sea un privateKeyEntry. También probé un programa java llamado ktl241 que decía java.lang.Exception: obj: no una instancia de X509Certificate al importar pem de clave privada. También probé los mejores resultados de búsqueda de google. – ivar

+2

Una vez escribí una entrada de blog sobre cómo hacerlo. Tal vez ayude: http://quakology.blogspot.com/2009/06/how-to-use-ssl-with-client-certificate.html – musiKk

Respuesta

13

Según mi entender, es imposible hacerlo con keytool solo. Yo uso openssl para la preparación.

Supongamos que la clave está en el archivo key y el certificado está en un archivo cert. Hay que crear un archivo PKCS12 que contiene tanto (porque puede manejar keytool PKCS12 y JKS y yo no sé si todo lo demás):

openssl pkcs12 -inkey key -in cert -export -out keys.pkcs12 

ya se puede importar eso en un almacén de claves:

keytool -importkeystore -srckeystore keys.pkcs12 -srcstoretype pkcs12 -destkeystore mykeystore 

Este enfoque funcionó para mí donde todo lo demás falló.

+2

Para mostrar toda la cadena en la entrada de clave privada del almacén de claves, puede juntar varios archivos .pem de la cadena de certificados y agregarlos a pkcs-store utilizando la opción '-certfile' de openssl. – Andy

+0

Esto funcionó para mí. Sin embargo, tuve que asegurarme de usar siempre la misma contraseña; Pensé que podría escribir y leer el PKCS12 con una contraseña temporal, y solo dar el * real * para la salida de 'keytool', pero eso creó un almacén de claves donde keystore y key tenían contraseñas diferentes, lo que aparentemente es muy malo (http : //joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/). – Blaisorblade

+0

@ La solución de musiKk funcionó para mí con un pequeño cambio al crear el archivo PKCS12, establecer la contraseña, de lo contrario habrá un error para el último comando keytool. openssl pkcs12 -inkey key -in cert -export -out keys.pkcs12 -passout pass: yourpasswd –

Cuestiones relacionadas