respuesta - Importación del par de clave privada/certificado público en Java KeyStore
las claves públicas en la respuesta y en el almacén de claves no coinciden (2)
Esta pregunta ya tiene una respuesta aquí:
Utilicé los siguientes pasos para crear un nuevo almacén de claves Java con un par de claves privadas / públicas para ser utilizado por un servidor Java (interno) con TLS. Tenga en cuenta que el certificado es autofirmado:
1) Generar clave con AES256
openssl genrsa -aes256 -out server.key 1024
2) Generar solicitud de certificado para CA
openssl req -x509 -sha256 -new -key server.key -out server.csr
3) Generar tiempo de caducidad auto-firmado 10 años
openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt
4) Use un programa como KeyStoreExplorer para importar el par (clave privada y certificado autofirmado) en un nuevo JKS
Esto funciona, pero me gustaría implementar el último paso sin usar una GUI.
Sé cómo importar el certificado autofirmado solo:
// create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN''T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION
/usr/java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks
Entonces, la pregunta es: ¿cómo puedo crear una Java KeyStore e importar tanto el certificado con la clave pública como la clave privada sin usar una GUI?
Con su clave privada y certificado público, primero debe crear un almacén de claves PKCS12 y luego convertirlo en JKS.
# Create PKCS12 keystore from private key and public certificate.
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12
# Convert PKCS12 keystore into a JKS keystore
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert
Para verificar el contenido de JKS, puede usar este comando:
keytool -list -v -keystore mykeystore.jks
Si no se trata de un certificado autofirmado, probablemente desee seguir este paso con la importación de la cadena de certificados que conduce al certificado de CA de confianza.
Un almacén de claves necesita un archivo de almacén de claves. La clase KeyStore
necesita un FileInputStream
. Pero si proporciona un nulo (en lugar de la instancia de FileInputStream
) , se cargará un almacén de claves vacío . Una vez que crea un almacén de claves, puede verificar su integridad utilizando la keytool
claves.
El código siguiente crea un almacén de claves vacío con contraseña vacía
KeyStore ks2 = KeyStore.getInstance("jks"); ks2.load(null,"".toCharArray()); FileOutputStream out = new FileOutputStream("C://mykeytore.keystore"); ks2.store(out, "".toCharArray());
Una vez que tenga el almacén de claves, importar el certificado es muy fácil. Consulte este enlace para obtener el código de muestra.