¿Cómo importar un certificado X.509 existente y una clave privada en el almacén de claves de Java para usarlos en SSL?

Resuelto Aleksandar Ivanisevic asked hace 15 años • 16 respuestas

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?

Aleksandar Ivanisevic avatar May 25 '09 18:05 Aleksandar Ivanisevic
Aceptado

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 -chainopció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.

reto avatar Nov 22 '2011 09:11 reto

Keytoolen 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.

  1. 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
    
  2. 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]
    
OtherDevOpsGene avatar Jan 26 '2010 17:01 OtherDevOpsGene