136 votes

Comment convertir le fichier .pfx en keystore avec clé privée ?

Je dois signer une application Android ( .apk ).
J'ai .pfx fichier. Je l'ai converti en .cer via Internet Explorer, puis converti .cer a .keystore en utilisant keytool. Puis j'ai essayé de signer .apk avec jarsigner mais il indique que le fichier .keystore ne contient pas de clé privée.

Qu'est-ce que je fais de mal ?

0 votes

Cela peut être utile : comment trouver et exécuter le keytool pour Windows stackoverflow.com/questions/5488339/

311voto

MikeD Points 2229

Utilisation de JDK 1.6 ou plus

Justin a fait remarquer dans les commentaires ci-dessous que keytool seul est capable de faire cela en utilisant la commande suivante (bien que seulement dans JDK 1.6 et plus) :

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Utilisation du JDK 1.5 ou inférieur

OpenSSL peut tout faire. Cette réponse sur JGuru est la meilleure méthode que j'ai trouvée jusqu'à présent.

Tout d'abord, assurez-vous que vous avez OpenSSL installé. De nombreux systèmes d'exploitation l'ont déjà installé, comme je l'ai constaté avec Mac OS X.

Les deux commandes suivantes convertissent le fichier pfx dans un format qui peut être ouvert en tant que magasin de clés Java PKCS12 :

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

Notez que le nom fourni dans la deuxième commande est l'alias de votre clé dans le nouveau magasin de clés.

Vous pouvez vérifier le contenu de la base de données de clés à l'aide de l'utilitaire Java keytool avec la commande suivante :

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Enfin, si vous le souhaitez, vous pouvez convertir ce fichier en un magasin de clés JKS en important le magasin de clés créé ci-dessus dans un nouveau magasin de clés :

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

31 votes

Il n'est pas nécessaire de suivre ces trois étapes, il suffit d'exécuter : keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

0 votes

Je pense que les anciennes versions de keytool ne vous permettaient pas de le faire. Je me souviens qu'il y a 8 ans, je devais exécuter openssl, mais maintenant, avec keytool dans le JDK 6 et 7 d'Oracle, cela fonctionne comme un charme, comme l'a dit Justin.

2 votes

Veuillez noter que j'ai donné cette réponse sous une forme plus simple et avec plus de détails un an avant Justin.

32voto

kaptan Points 1105

J'ai trouvé ce qui vous explique comment importer un PFX vers JKS (Java Key Store) :

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

0 votes

J'ai un problème, le pfx n'a pas de mot de passe, alors -srcstorepass est mon problème. Ce PFX est créé par un client LetsEncrypt pour Windows.

25voto

gjpc Points 838

Jarsigner peut utiliser votre fichier pfx comme keystore pour signer votre jar. Assurez-vous que votre fichier pfx contient la clé privée et la chaîne de certificats lorsque vous l'exportez. Il n'est pas nécessaire de le convertir dans d'autres formats. L'astuce consiste à obtenir le Alias de votre fichier pfx :

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Une fois que vous avez votre alias, la signature est facile.

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

Les deux commandes ci-dessus vous demanderont le mot de passe que vous avez spécifié lors de l'exportation pfx. Si vous voulez que votre mot de passe soit affiché en clair, utilisez la commande -storepass avant que le -keystore commutateur

Une fois signé, admirez votre travail :

jarsigner.exe -verify -verbose -certs  yourjarfile

2 votes

+1 pour ne pas avoir à convertir le fichier keystore (je l'ai déjà dans suffisamment de formats !)

2voto

TechIsFun Points 11

Justin(ci-dessus) est exact. Cependant, gardez à l'esprit qu'en fonction de la personne qui vous fournit le certificat (CA intermédiaire, CA racine impliquée ou non) ou de la façon dont le pfx est créé/exporté, il peut parfois manquer la chaîne de certificats. Après l'importation, vous aurez un certificat de type PrivateKeyEntry, mais avec une chaîne de longueur 1.

Pour résoudre ce problème, il existe plusieurs options. La plus simple, à mon avis, est d'importer et d'exporter le fichier pfx dans IE (en choisissant l'option Inclure tous les certificats de la chaîne). Le processus d'importation et d'exportation de certificats dans IE devrait être très facile et bien documenté ailleurs.

Une fois exporté, importez le keystore comme indiqué par Justin ci-dessus. Maintenant, vous aurez un keystore avec un certificat de type PrivateKeyEntry et avec une longueur de chaîne de certificat supérieure à 1.

Certains clients de services Web basés sur .Net se trompent (incapables d'établir une relation de confiance), si vous ne faites pas ce qui précède.

0 votes

Cela ne semble pas fonctionner sur IE11. Il ne parvient pas à inclure la chaîne de certificats, même si je lui demande de le faire. Je sais que cela a déjà fonctionné par le passé.

1voto

Bernard Points 5492

Votre fichier PFX doit contenir la clé privée. Exportez la clé privée et le certificat directement depuis votre fichier PFX (par exemple en utilisant OpenSSL) et importez-les dans votre keystore Java.

Modifier

Pour plus d'informations :

  • Télécharger OpenSSL pour Windows aquí .
  • Exportation de la clé privée : openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Certificat d'exportation : openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Importez la clé privée et le certificat dans le keystore Java en utilisant keytool .

0 votes

Pouvez-vous me dire comment importer key.pem et cert.pem avec keytool ?

1 votes

Petit ajout : il faut ajouter -nodes à la fin lors de l'exportation des ky privés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X