web-dev-qa-db-fra.com

Comment convertir un fichier .pfx en magasin de clés avec clé privée?

Je dois signer l'application Android (.apk).
J'ai le fichier .pfx. Je l'ai converti en fichier .cer via Internet Explorer, puis j'ai converti .cer en .keystore à l'aide du logiciel keytool. Ensuite, j'ai essayé de signer .apk avec jarsigner mais il est indiqué que .keystore ne contient pas de clé privée.

Qu'est-ce que je fais mal?

100
Ola

Utilisation de JDK 1.6 ou version ultérieure

Justin a fait remarquer dans les commentaires ci-dessous que Keytool seul est capable de le faire en utilisant la commande suivante (bien que seulement dans JDK 1.6 et versions ultérieures):

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

Utilisation de JDK 1.5 ou inférieur

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

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

Les deux commandes suivantes convertissent le fichier pfx dans un format pouvant ê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"

REMARQUE: 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 du magasin de clés à l'aide de l'utilitaire Java keytool à l'aide de la commande suivante:

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

Enfin, si vous en avez besoin, vous pouvez convertir cela 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
246
MikeD

jarsigner peut utiliser votre fichier pfx comme magasin de clés pour la signature de votre jar. Assurez-vous que votre fichier pfx a la clé privée et la chaîne de certificats lorsque vous l'exportez. Il n'est pas nécessaire de convertir en 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 souhaitez afficher votre mot de passe en texte clair, utilisez le commutateur - storepass avant le commutateur - keystore

Une fois signé, admirez votre travail:

jarsigner.exe -verify -verbose -certs  yourjarfile
22
gjpc

J'ai trouvé la page this qui vous explique comment importer un fichier 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
17
kaptan

Justin (ci-dessus) est exact. Cependant, gardez à l'esprit que, selon l'origine du certificat (autorité de certification intermédiaire, autorité de certification racine impliquée ou non) ou la manière dont le pfx est créé/exporté, la chaîne de certificats peut parfois manquer. Après l'importation, vous disposerez d'un certificat de type PrivateKeyEntry, mais avec une chaîne de longueur égale à 1.

Pour résoudre ce problème, il existe plusieurs options. L'option la plus simple dans mon esprit 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 des certificats dans IE devrait être très simple et bien documenté ailleurs.

Une fois exporté, importez le magasin de clés comme indiqué par Justin ci-dessus. Vous disposerez désormais d'un magasin de clés avec un certificat de type PrivateKeyEntry et une longueur de chaîne de certificats supérieure à 1.

Certains clients de services Web basés sur .Net obtiennent une erreur (impossible d'établir une relation de confiance), si vous ne procédez pas comme indiqué ci-dessus.

2
TechIsFun

Votre fichier PFX doit contenir la clé privée. Exportez la clé privée et le certificat directement à partir de votre fichier PFX (par exemple, à l'aide d'OpenSSL) et importez-les dans votre magasin de clés Java.

Modifier

Informations complémentaires:

  • Téléchargez OpenSSL pour Windows ici .
  • Exporter 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 magasin de clés Java à l'aide de keytool.
2
Bernard

Si vous travaillez avec JDK 1.5 ou inférieur, l’utilitaire keytool n’aura pas l’option _-importkeystore_ (voir documentation de JDK 1.5 keytool ) et la solution de MikeD ne sera disponible que par le transfert de _.pfx_ sur une machine avec un kit JDK plus récent (1.6 ou supérieur).

Une autre option de JDK version 1.5 ou inférieure (si vous avez le produit Oracle WebLogic) consiste à suivre les instructions de ce document Oracle: tilisation des formats de certificat PFX et PEM avec des magasins de clés . Il décrit la conversion au format _.pem_, comment extraire les informations de certificat de ce format textuel et l'importer au format _.jks_ avec l'utilitaire _Java utils.ImportPrivateKey_ (utilitaire inclus avec le produit WebLogic).

0
Mariano Paniga