web-dev-qa-db-fra.com

Importation de la paire clé privée / certificat public dans le KeyStore Java

J'ai utilisé les étapes suivantes pour créer un nouveau magasin de clés Java avec une paire de clés privée/publique à utiliser par un serveur Java (interne) avec TLS. Veuillez noter que le certificat est auto-signé:

1) Générer une clé avec AES256

openssl genrsa -aes256 -out server.key 1024

2) Générer une demande de certificat pour CA

openssl req -x509 -sha256 -new -key server.key -out server.csr

3) Générer soi-même un délai d'expiration de 10 ans

openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt

4) Utilisez un programme tel que KeyStoreExplorer pour importer la paire (clé privée et certificat auto-signé) dans un nouveau JKS.

Cela fonctionne mais j'aimerais implémenter la dernière étape sans utiliser d'interface graphique.

Je sais importer uniquement le certificat auto-signé:

// 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

La question est donc la suivante: comment créer un magasin de clés Java et importer le certificat avec la clé publique et la clé privée sans utiliser d'interface graphique?

72
kingston

Avec votre clé privée et votre certificat public, vous devez d'abord créer un magasin de clés PKCS12, puis le convertir 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

Pour vérifier le contenu du JKS, vous pouvez utiliser cette commande:

keytool -list -v -keystore mykeystore.jks

S'il ne s'agit pas d'un certificat auto-signé, vous voudrez probablement suivre cette étape pour importer la chaîne de certificats menant au certificat d'autorité de certification approuvé.

171
gtrig

Un magasin de clés a besoin d'un fichier de magasin de clés. La classe KeyStore a besoin de FileInputStream. Mais si vous fournissez null (au lieu de FileInputStream instance), un magasin de clés vide sera chargé . Une fois que vous avez créé un fichier de clés, vous pouvez vérifier son intégrité à l'aide de keytool.

Le code suivant crée un magasin de clés vide avec un mot de passe vide

  KeyStore ks2 = KeyStore.getInstance("jks");
  ks2.load(null,"".toCharArray());
  FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore");
  ks2.store(out, "".toCharArray());

Une fois que vous avez le magasin de clés, l'importation du certificat est très facile. Checkout ce lien pour l'exemple de code.

0
Santosh