Importation de la chaîne de certificats PEM et de la clé dans Java Keystore

29

Il existe de nombreuses ressources sur ce sujet, mais je n'en ai trouvé aucune qui couvre ce cas un peu spécial.

J'ai 4 fichiers;

  • privatekey.pem
  • certificate.pem
  • intermediaire_rapidssl.pem
  • ca_geotrust_global.pem

Et je souhaite les importer dans un nouveau magasin de clés.

Certains sites suggèrent d'utiliser le format DER et de les importer un par un, mais cela a échoué car la clé n'est pas reconnue.

Un autre site a suggéré une classe spéciale "ImportKey" à exécuter pour l'importation, et cela a fonctionné jusqu'à ce que je constate que la chaîne est rompue. C'est-à-dire que la longueur de la chaîne sur le certificat est 1, en ignorant l'intermédiaire et ca.

Certains sites suggèrent PKCS7, mais je ne peux même pas obtenir de chaîne à partir de cela. D'autres suggèrent le format PKCS12, mais en ce qui concerne mes tests, cela a également échoué pour obtenir la chaîne entière.

Tous les conseils ou astuces sont les bienvenus.

Trollbane
la source

Réponses:

26

Ce n'est peut-être pas parfait, mais j'avais quelques notes sur mon utilisation keytoolque j'ai modifiées pour votre scénario.

  1. Importez un certificat d'autorité de certification racine ou intermédiaire dans un magasin de clés Java existant:

    keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks
    keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks 
    
  2. Combinez le certificat et la clé privée dans un fichier avant l'importation.

    cat certificate.pem privatekey.pem > combined.pem
    

    Cela devrait entraîner un fichier ressemblant au format ci-dessous.

    COMMENCER LE CERTIFICAT
    ...
    FIN
    DU CERTIFICAT COMMENCER LA CLÉ PRIVÉE RSA
    ...
    FIN LA CLÉ PRIVÉE RSA

  3. Importez un certificat et une clé principaux signés dans un magasin de clés Java existant:

    keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
    
Aaron Copley
la source
2
Quelle version de keytool vous permet de chaîner comme ça? Cette syntaxe donne "erreur keytool: java.lang.Exception: certificat non importé, l'alias <root> existe déjà" avec à la fois -import et
-importcert
Difficile à dire, exactement. Mais étant donné l'année / le mois, c'était probablement Java 6? (Aucune idée de la version mineure.) Quelle version utilisez-vous? L'erreur se lit comme si le problème pouvait être lié au magasin de clés lui-même. ( alias <root> already exists) Pouvez-vous essayer avec un nouveau magasin de clés vide?
Aaron Copley
1
Keytool ne me permet pas d'importer un certificat en utilisant un «root» d'alias déjà existant. Mais je pense que c'était une faute de frappe. Il est intéressant de noter que keytool crée une chaîne pour votre certificat lui-même lorsqu'il trouve les certificats des signataires dans le magasin de clés (sous n'importe quel alias). L'outil Java "Portecle" est pratique pour gérer le magasin de clés java.
Houtman
Keytool ne fonctionne pas comme ça et ne vous permet pas d'importer un alias plus d'une fois comme décrit. (Et oui, j'ai essayé). Voir la réponse de senajqerib ci-dessous pour quelque chose qui fonctionne correctement.
Steve Sether
1
C'est une réponse vieille de trois ans. Il est tout à fait possible que les choses aient changé, mais je vous assure que cela a fonctionné (ou était sur le point de fonctionner car j'ai indiqué qu'il n'était peut-être pas parfait) en février 2013. N'hésitez pas à soumettre une modification ou à la signaler à l'attention du modérateur.
Aaron Copley
42

Concaténer tous les fichiers * .pem en un seul fichier pem, comme all.pem Puis créer un fichier de clés au format p12 avec clé privée + all.pem

openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12

Puis exportez p12 en jks

keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks
senanqerib
la source
Merci. C'est la seule réponse complète et correcte. Comme vous l'avez suggéré, il est beaucoup plus facile de simplement concaténer les certificats en un seul fichier.
Steve Sether
Cela a fonctionné comme un régal pour moi !! J'ai utilisé ces instructions pour convertir une chaîne de clés utilisée dans le référentiel d'exemple de certificat nodejs-self-signed-certificate pour parler à un serveur TLS basé sur Java. Merci mille fois!
Galder Zamarreño
C'est la bonne réponse.
sfThomas
8

keytool ne fournit pas un moyen d'importer le certificat + la clé privée à partir d'un seul fichier (combiné), comme proposé ci-dessus. Il fonctionne correctement, mais seul le certificat est importé, tandis que la clé privée est ignorée. Vous pouvez le vérifier par keytool -list -v -keystore yourkeystore.jks: le type d'entrée de votre domaine est TrustedCertEntry et non PrivateKeyEntry.

Donc, pour résoudre le problème initial, il faut d'abord créer un magasin de clés PKCS # 12 en utilisant openssl (ou un outil similaire), puis importer le magasin de clés avec keytool -importkeystore.

Ixmal
la source