convertir la clé .p7b en .pfx

10

J'ai un certificat SSL au format .p7b que je dois convertir en .pfx. Si j'essaie via la gestion des certificats Windows, l'option Expert en tant que .pfx est désactivée.

En essayant avec openssl, j'ai trouvé les deux commandes suivantes pour effectuer la conversion:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

mais je ne sais pas quelle clé utiliser pour la seconde commande, ni à quoi fait référence le certificat CACert.cer.

Comment puis-je convertir cette clé au format .pfx?

DrStalker
la source

Réponses:

20

PKCS # 7 n'inclut pas la partie privée (clé) d'une paire certificat / clé privée, il est couramment utilisé pour la diffusion de certificats (par exemple comme réponse à une demande de certificat PKCS # 10, comme moyen de distribuer des certificats S / MIME utilisé pour crypter les messages, ou pour valider les messages signés, etc.). Il est important de se rappeler que ce n'est que pour les certificats qui sont par définition des objets publics.

PKCS # 12 est un conteneur plus universel - il est destiné à stocker à la fois la clé privée et les parties de certificat public afin qu'elles puissent être déplacées. Il a la capacité d'être protégé par mot de passe pour fournir une certaine protection aux clés.

PFX était le prédécesseur de PKCS # 12.

Vous ne pouvez pas (comme le souligne Anitak) convertir de PKCS # 7 en PKCS # 12 sans données supplémentaires (la partie clé privée) car PKCS # 7 n'a pas toutes les données.

Mark Sutton a expliqué pourquoi vous ne pouvez pas exporter en tant que PFX - le certificat en question a sa clé privée marquée comme non exportable. Le fournisseur de services cryptographiques (CSP) ne permettra pas le déplacement de cette clé, c'est intentionnel. La seule * manière d'obtenir une paire de clés \ cert exportable est de délivrer le certificat d'origine avec le jeu d'indicateurs exportables. Il est également possible qu'aucune clé privée ne soit associée au certificat, mais je suppose que ce n'est pas le cas ici.

Il existe un bon résumé des différents types de PKCS sur Wikipédia .

  • La seule façon légitime au moins. Selon le matériel CSP \ Crypto, il peut y avoir des mécanismes, en particulier pour les logiciels uniquement CSP, mais c'est un domaine pour la recherche de vulnérabilité de sécurité uniquement en ce qui me concerne, pas l'administrateur système.
Helvick
la source
Merci - il semble que l'achat d'un nouveau certificat puisse être moins cher que sa récupération, en fonction du temps que nous aurons à traiter avec un tiers pour le faire.
DrStalker
12

Je passe par tous les 2 ans (quand je renouvelle un certificat de signature de code) et c'est à chaque fois une douleur.

Une information clé est que vous pouvez simplement renommer les fichiers .p7b en .spc (comme indiqué ici: http://support.microsoft.com/kb/269395 ).

Vous pouvez ensuite utiliser l'outil pvk2pfx.exe pour convertir votre PVK + SPC en PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(vous pourrez peut-être ignorer l'étape de changement de nom du p7b et l'utiliser directement; je n'ai pas essayé ...)

John Hart
la source
c'est beaucoup plus utile que la réponse acceptée. Je suis étonné de l'état du non-sens de signature de code. Je grince des dents à l'idée de devoir répéter cela encore et encore lorsque les certificats expirent.
Tim
3

Avec l'outil Windows, si l'option pfx est désactivée, cela signifie que la clé privée ne peut pas être exportée à partir du magasin local. C'est parce que ce n'est pas là (parce que les clés n'ont pas été générées sur la boîte que vous utilisez) ou parce que lorsque vous avez généré les clés, la clé privée n'était pas marquée comme exportable et le modèle de certificat Windows n'était pas configuré pour autoriser l'exportation.

Je suppose que vous utilisez une autorité de certification Microsoft pour émettre vos certificats. Est-ce correct?

Si oui, alors: -

1.Assurez-vous que le modèle de certificat permet l'exportation de clés privées.
2. Comment générez-vous votre demande de certificat, vous pouvez utiliser la technique suivante

CRÉER le fichier INF comme suit

[Version]
Signature = "$ Windows NT $

[NewRequest]
Subject =" etc "
KeySpec = 1
Exportable = 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

NOTE l'exportable = 1
Utilisez ensuite les commandes fllowing à l'invite de commande

certreq -new infile.inf reqfile.req // où infile.inf est le fichier ci-dessus et reqfile est le fichier de demande de sortie

certreq -submit -config \ reqfile.req // soumet la demande de certificat à l'autorité de certification

Une fois cette opération terminée, vous être en mesure d'exporter le certificat en tant que pfx

Vous pouvez également accéder à http://www.blacktipconsulting.com/Site/Products.html où j'ai mis mon outil de ligne de commande gratuit qui fait tout cela pour vous et exporte le certificat en tant que pfx une fois terminé

Mark Sutton
la source
2

Comme Helvick l'a souligné, la réponse de PKCS10 est PKCS7 et ne contient pas la clé privée. Ainsi, lors de la génération du CSR, vous devriez avoir généré un fichier privatekey.key. Vous pouvez utiliser les commandes suivantes. (Je sais que c'est une question vieille de quatre ans mais je n'ai pas pu le faire en suivant la discussion sur la page).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Bonne chance!

Cordialement, JE

java_enthu
la source
Vous n'aurez peut-être pas besoin de l' -informargument.
palswim
1

Je peux me tromper, mais je pense que votre fichier PCKCS # 7 ne comprend que la moitié publique de votre certificat.

Le fichier PKCS # 12 devrait avoir les deux moitiés - c'est pourquoi il a besoin de l' -inkeyoption.

Alnitak
la source