¿Cómo importar un certificado X.509 existente y una clave privada en el almacén de claves de Java para usarlos en SSL?
Tengo un par de certificados X.509 y un archivo de clave.
¿Cómo importo esos dos en un único almacén de claves? En todos los ejemplos, Google siempre podría generar la clave ellos mismos, pero ya tengo una clave.
Yo he tratado:
keytool -import -keystore ./broker.ks -file mycert.crt
Sin embargo, esto sólo importa el certificado y no el archivo de clave. Intenté concatenar el certificado y la clave pero obtuve el mismo resultado.
¿Cómo importo la clave?
Utilicé los siguientes dos pasos que encontré en los comentarios/publicaciones vinculadas en las otras respuestas:
Paso uno: convierta el certificado y la clave x.509 en un archivo pkcs12
openssl pkcs12 -export -in server.crt -inkey server.key \
-out server.p12 -name [some-alias] \
-CAfile ca.crt -caname root
Nota: asegúrese de poner una contraseña en el archivo pkcs12; de lo contrario, obtendrá una excepción de puntero nulo cuando intente importarlo. (Por si alguien más tuvo este dolor de cabeza). (¡ Gracias jocull! )
Nota 2: Es posible que desee agregar la -chain
opción para conservar la cadena de certificados completa. ( Gracias Mafuba )
Paso dos: convierta el archivo pkcs12 en un almacén de claves Java
keytool -importkeystore \
-deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \
-srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \
-alias [some-alias]
Finalizado
OPCIONAL Paso cero: crear un certificado autofirmado
openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Preguntas frecuentes: recibo un errorIOException: keystore password was incorrect
Si está utilizando OpenSSL 3.0 y un JDK más reciente que Java8u302 y obtiene el siguiente error:
keytool error: java.io.IOException: keystore password was incorrect
Es posible que se encuentre atrapado en un cambio de cifrado predeterminado dentro de openssl. Esta respuesta de desbordamiento de pila proporciona una respuesta. Quizás agradecer a Thomas con un voto positivo.
Keytool
en Java 6 tiene esta capacidad: Importar claves privadas a un almacén de claves de Java usando keytool
Aquí están los detalles básicos de esa publicación.
Convierta el certificado existente a un PKCS12 usando
OpenSSL
. Se requiere una contraseña cuando se le solicita o el segundo paso se quejará.openssl pkcs12 -export -in [my_certificate.crt] -inkey [my_key.key] \ -out [keystore.p12] -name [new_alias] -CAfile [my_ca_bundle.crt] \ -caname root
Convierta el PKCS12 en un archivo de almacén de claves Java.
keytool -importkeystore -deststorepass [new_keystore_pass] \ -destkeypass [new_key_pass] -destkeystore [keystore.jks] \ -srckeystore [keystore.p12] -srcstoretype PKCS12 \ -srcstorepass [pass_used_in_p12_keystore] \ -alias [alias_used_in_p12_keystore]