Comment créer un fichier .pfx à partir d'un certificat et d'une clé privée?

363

J'ai besoin d'un fichier .pfx pour installer https sur le site Web sur IIS.

J'ai deux fichiers distincts: certificat (.cer ou pem) et clé privée (.crt) mais IIS accepte uniquement les fichiers .pfx.

J'ai évidemment installé le certificat et il est disponible dans le gestionnaire de certificats (mmc) mais lorsque je sélectionne l'assistant d'exportation de certificat, je ne peux pas sélectionner le format PFX (il est grisé)

Existe-t-il des outils pour le faire ou des exemples C # de le faire par programme?

jlp
la source
2
doublon possible de Convertir un certificat CERT / PEM en certificat PFX
Daniel DiPaolo
1
vrai, mais sa réponse n'est pas claire et ne
règle
@alexl existe-t-il une version Windows?
jlp
Openssl est totalement inutile dans presque tous les cas. Je viens d'ajouter ma réponse (que je crée une entrée de blog à fournir). L'ironie est que lorsque vous générez le CSR comme prévu, vous n'aurez probablement même pas besoin du PFX.
rainabba

Réponses:

554

Vous devrez utiliser openssl.

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt

Le fichier de clé est juste un fichier texte contenant votre clé privée.

Si vous avez une autorité de certification racine et des certificats intermédiaires, incluez-les également en utilisant plusieurs -inparamètres

openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt

Vous pouvez installer openssl à partir d'ici: openssl

jdehlin
la source
11
"Le fichier de clé est juste un fichier texte contenant votre clé privée." Vrai, sauf quand ce n'est pas le cas.
Casey
37
Merci, je vais également ajouter que si vous avez une autorité de certification racine ou un certificat intermédiaire, vous pouvez l'ajouter en fournissant plusieurs paramètres -in :openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt -in intermediate.crt -in rootca.crt
gerrytan
10
A fait le travail pour moi. À titre mineur, l'exécution de cette opération sur une machine Windows nécessite que vous exécutiez openssl dans une invite de commandes administrateur.
Martin Costello
13
D'où obtenez-vous le fichier clé? J'ai obtenu un certificat SSL, mais je ne vois aucun fichier de clé nulle part. Je viens de recevoir un fichier p7b et un tas de fichiers * .crt.
Knelis
11
Afin que cela fonctionne sur openssl 1.0.2m, je devais spécifier -certfile intermediate.crt -certfile rootca.crtavant d'être invité à protéger le .pfxavec un mot de passe / mot de passe. Je crois que c'est probablement parce que le fichier .keyne correspond pas aux -infichiers supplémentaires , ce qui entraîne le message d'erreur «Aucun certificat ne correspond à la clé privée» que je recevais.
dragon788
36

L'utilitaire de ligne de commande Microsoft Pvk2Pfx semble avoir les fonctionnalités dont vous avez besoin:

Pvk2Pfx (Pvk2Pfx.exe) est un outil en ligne de commande qui copie les informations de clé publique et de clé privée contenues dans les fichiers .spc, .cer et .pvk dans un fichier d'échange d'informations personnelles (.pfx).
http://msdn.microsoft.com/en-us/library/windows/hardware/ff550672(v=vs.85).aspx

Remarque: si vous avez besoin / voulez / préférez une solution C #, alors vous pouvez envisager d'utiliser l' api http://www.bouncycastle.org/ .

Seymour
la source
1
-spc pour le fichier .cer
BozoJoe
2
C: \ Program Files (x86) \ Kits Windows \ 10 \ bin \ 10.0.15063.0 \ x64 \ pvk2pfx.exe
Stefan Steiger
35

Si vous recherchez une interface graphique Windows, consultez DigiCert. Je viens de l'utiliser et c'était assez simple.

Sous l'onglet SSL, j'ai d'abord importé le certificat. Ensuite, une fois que j'ai sélectionné le certificat, j'ai pu l'exporter en tant que PFX, avec et sans fichier de clés.

https://www.digicert.com/util

joelnet
la source
15
Lorsque je fais cela, il me dit que la clé privée n'est pas importée sur mon ordinateur. Ce qui est vrai.
Niels Brinch
6
@NielsBrinch Lorsque je fais cela, il m'indique également que je n'ai pas la clé privée importée sur mon ordinateur. Attendez-vous à ce que ce soit faux, c'est dans le même dossier que le certificat ...
aBertrand
@NielsBrinch Pour résoudre ce problème, j'ai dû soumettre à nouveau un nouveau CSR, puis télécharger à nouveau le certificat lors de son traitement, la clé privée était cachée sur le serveur / la machine sur laquelle vous avez créé le CSR. Cela a résolu ce message d'erreur.
Paddymac
Je peux recommander DigiCert sur la base de plusieurs années d'expérience avec eux.
mmell
N'oubliez pas d'inclure la clé privée dans le répertoire racine de l' DigiCertUtil.exeexécutable. Le plus simple est de simplement le copier dans le dossier des certificats.
Jonas
32

Vous n'avez PAS besoin de openssl ou makecert ou de tout cela. Vous n'avez pas non plus besoin de la clé personnelle qui vous a été donnée par votre autorité de certification. Je peux presque garantir que le problème est que vous vous attendez à pouvoir utiliser les fichiers de clés et de cer fournis par votre autorité de certification, mais ils ne sont pas basés sur "la manière IIS". Je suis tellement fatigué de voir des informations mauvaises et difficiles ici que j'ai décidé de bloguer sur le sujet et la solution. Lorsque vous réalisez ce qui se passe et voyez à quel point c'est facile, vous voudrez me faire un câlin :)

Certificats SSL pour IIS avec PFX une fois pour toutes - SSL et IIS expliqués - http://rainabba.blogspot.com/2014/03/ssl-certs-for-iis-with-pfx-once-and-for.html

Utilisez l'interface utilisateur "Certificats de serveur" IIS pour "Générer une demande de certificat" (les détails de cette demande sont hors de portée de cet article mais ces détails sont essentiels). Cela vous donnera une CSR préparée pour IIS. Vous remettez ensuite ce CSR à votre CA et demandez un certificat. Ensuite, vous prenez le fichier CER / CRT qu'ils vous donnent, revenez à IIS, "Complete Certificate Request" au même endroit où vous avez généré la demande. Il peut demander un .CER et vous pourriez avoir un .CRT. Ce sont les mêmes choses. Modifiez simplement l'extension ou utilisez le .liste déroulante d'extension pour sélectionner votre .CRT. Fournissez maintenant un "nom convivial" approprié (* .votredomaine.com, votredomaine.com, foo.votredomaine.com, etc.) C'EST IMPORTANT! Cela DOIT correspondre à ce pour quoi vous avez configuré la CSR et à ce que votre autorité de certification vous a fourni. Si vous avez demandé un caractère générique, votre autorité de certification doit avoir approuvé et généré un caractère générique et vous devez l'utiliser. Si votre CSR a été généré pour foo.votredomaine.com, vous DEVEZ fournir la même chose à cette étape.

rainabba
la source
2
La question s'est ouverte par: "J'ai besoin du fichier .pfx pour installer https sur le site Web sur IIS."
rainabba
34
Pouvez-vous s'il vous plaît mettre le contenu pertinent de votre message dans votre réponse s'il vous plaît? De cette façon, la réponse reste pertinente même si votre blog disparaît. Vous pouvez toujours créer un lien vers votre blog. En l'état, il y a 0 information utile dans le contenu de la réponse.
Deanna
16
C'est le moyen le plus simple si vous demandez un nouveau certificat, mais cela ne fonctionnera pas si vous avez déjà un certificat et / ou une clé privée (par exemple, vous avez déjà utilisé avec apache) car la demande de signature de certificat d'IIS générera un nouveau privé Je trouve cet aspect d'IIS vraiment ennuyeux car tout ce que "la demande complète" fait est de combiner la clé privée avec le certificat public pour produire un pfx, pourquoi il ne pouvait pas simplement les accepter en tant que fichiers séparés au format PEM qui sait.
Chris Chilvers
2
Bien que j'apprécie que votre solution soit très probablement «la bonne façon de faire», je pense que cela demande plus d'efforts que de se mêler à openssl - un outil, un appel de ligne de commande, un mot de passe, c'est fait. Je ne sais pas non plus si toutes les sociétés SSL soutiennent cette approche.
Jan Bühler
8
Je crains que votre réponse n'aide pas si le certificat a été généré ailleurs. D'accord, IIS s'attend à générer et à conserver la clé privée elle-même - parfois ce n'est tout simplement pas une option.
staticsan
8

J'ai créé un fichier .pfx à partir de fichiers .key et .pem.

Comme ça openssl pkcs12 -inkey rootCA.key -in rootCA.pem -export -out rootCA.pfx

Siim Nelis
la source
1
Il s'agit essentiellement de la même commande que j'ai utilisée, mais je devais ajouter winpty avant openssl (par exemple, winpty openssl pkcs12 ....) tout en utilisant Git bash, qui est une solution courante pour openssl sur Windows.
smoore4
Je n'avais pas besoin de l' -exportinterrupteur.
mmell
7

https://msdn.microsoft.com/en-us/library/ff699202.aspx

((les citations pertinentes de l'article sont ci-dessous))

Ensuite, vous devez créer le fichier .pfx que vous utiliserez pour signer vos déploiements. Ouvrez une fenêtre d'invite de commandes et tapez la commande suivante:

PVK2PFX –pvk yourprivatekeyfile.pvk –spc yourcertfile.cer –pfx yourpfxfile.pfx –po yourpfxpassword

où:

  • pvk - yourprivatekeyfile.pvk est le fichier de clé privée que vous avez créé à l'étape 4.
  • spc - yourcertfile.cer est le fichier de certificat que vous avez créé à l'étape 4.
  • pfx - yourpfxfile.pfx est le nom du fichier .pfx qui sera créé.
  • po - yourpfxpassword est le mot de passe que vous souhaitez attribuer au fichier .pfx. Vous serez invité à entrer ce mot de passe lorsque vous ajouterez le fichier .pfx à un projet dans Visual Studio pour la première fois.

(En option (et pas pour l'OP, mais pour les futurs lecteurs), vous pouvez créer le fichier .cer et .pvk à partir de zéro) (vous le feriez AVANT ce qui précède). Notez que les mm / jj / aaaa sont des espaces réservés pour les dates de début et de fin. voir l'article msdn pour une documentation complète.

makecert -sv yourprivatekeyfile.pvk -n "CN=My Certificate Name" yourcertfile.cer -b mm/dd/yyyy -e mm/dd/yyyy -r
granadaCoder
la source
6

Vous devez utiliser l'outil makecert.

Ouvrez une invite de commande en tant qu'administrateur et tapez ce qui suit:

makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"

<CertifcateName>= le nom de votre certificat à créer.

Ensuite, vous pouvez ouvrir le composant logiciel enfichable Gestionnaire de certificats pour la console de gestion en tapant certmgr.msc dans le menu Démarrer, cliquez sur personnel> certificats> et votre certificat doit être disponible.

Voici un article.

https://azure.microsoft.com/documentation/articles/cloud-services-certs-create/

BentOnCoding
la source
3
Je ne peux pas. Dans l'assistant d'exportation, l'option pfx est grisée
jlp
mon cert est disponible dans le gestionnaire certifacate. Ce que je ne peux pas faire, c'est d'exporter au format pfx. Que fait votre instruction de ligne de commande?
jlp
Essayez de créer le certificat comme indiqué et faites-moi savoir si cela fonctionne. Cela prendra probablement 5 minutes. L'article lié donne une explication complète de ce qui se passe.
BentOnCoding
Ce n'est pas ce que je recherche. Je ne veux pas faire de cert. moi même. J'ai acheté un certificat auprès d'une autorité de certification dans 2 fichiers. Je préfère utiliser l'outil OpenSSL
jlp
5

J'ai un lien avec votre besoin. Combinez des fichiers CRT et KEY dans un PFX avec OpenSSL

Extraits du lien ci-dessus:

Nous devons d'abord extraire le certificat de l'autorité de certification racine du fichier .crt existant, car nous en aurons besoin plus tard. Ouvrez donc le fichier .crt et cliquez sur l'onglet Chemin de certification.

Cliquez sur le certificat le plus haut (dans ce cas VeriSign) et appuyez sur Afficher le certificat. Sélectionnez l'onglet Détails et appuyez sur Copier dans un fichier…

Sélectionnez le certificat X.509 (.CER) codé en Base-64 Enregistrez-le sous rootca.cer ou quelque chose de similaire. Placez-le dans le même dossier que les autres fichiers.

Renommez-le de rootca.cer en rootca.crt Maintenant, nous devrions avoir 3 fichiers dans notre dossier à partir desquels nous pouvons créer un fichier PFX.

Voici où nous avons besoin d'OpenSSL. Nous pouvons soit le télécharger et l'installer sur Windows , soit simplement ouvrir un terminal sur OSX.

ÉDITER:

  1. Il existe un lien de support avec des informations étape par étape sur la façon d'installer le certificat.

  2. Une fois l'installation réussie, exportez le certificat, choisissez le .pfxformat, incluez la clé privée.

    Remarque importante :: Pour exporter le certificat au format .pfx, vous devez suivre les étapes sur la même machine à partir de laquelle vous avez demandé le certificat .

  3. Le fichier importé peut être téléchargé sur le serveur.

sudhAnsu63
la source
1
Pouvez-vous s'il vous plaît expliquer? comment exactement vous avez créé le fichier PFX à partir du fichier CERT? Où ou comment avez-vous créé le fichier KEY, veuillez tous confondre.
3
Pouvez-vous gentiment expliquer à partir d'ici comment ils vous ont fourni le fichier KEY? par exemple:openssl pkcs12 -inkey example.com.key -in example.com.crt -export -out example.com.pfx
5

C'est de loin le moyen le plus simple de convertir des fichiers * .cer en * .pfx:

Téléchargez simplement le convertisseur de certificat portable depuis DigiCert: https://www.digicert.com/util/pfx-certificate-management-utility-import-export-instructions.htm

Exécutez-le, sélectionnez un fichier et obtenez votre * .pfx !!

user1613797
la source
Génial! Cela a fonctionné. J'avais le fichier .p7b. J'ai importé cela dans mon IIS en utilisant les instructions fournies par GoDaddy. Ensuite, généré le fichier .cer (fichier clé), puis utilisé cet utilitaire pour obtenir le pfx.
Shiva Naru
L'outil Digicert est de loin le meilleur.
L_7337
1
Je ne vois aucun moyen de faire ce que le PO souhaite faire avec cet outil. Il semble vous permettre uniquement d'exporter des certificats - pas de les créer à partir de fichiers de clés et de cer.
NickG
1
Il vaut probablement la peine de mentionner que vous devez d'abord «installer» le certificat, puis revenir à l'onglet SSL et «exporter» pour obtenir le fichier pfx réel.
access_granted
3

Lorsque vous dites que le certificat est disponible dans MMC, est-il disponible sous "Utilisateur actuel" ou "Ordinateur local"? J'ai constaté que je ne peux exporter la clé privée que si elle se trouve sous Ordinateur local.

Vous pouvez ajouter le composant logiciel enfichable des certificats à MMC et choisir le compte pour lequel il doit gérer les certificats. Choisissez Ordinateur local. Si votre certificat n'est pas là, importez-le en cliquant avec le bouton droit sur le magasin et en choisissant Toutes les tâches> Importer.

Accédez maintenant à votre certificat importé sous la version Ordinateur local du composant logiciel enfichable de certificat. Cliquez avec le bouton droit sur le certificat et choisissez Toutes les tâches> Exporter. La deuxième page de l'assistant d'exportation devrait vous demander si vous souhaitez exporter la clé privée. Sélectionnez Oui. L'option PFX sera désormais la seule disponible (elle est grisée si vous sélectionnez non et l'option d'exporter la clé privée n'est pas disponible sous le compte d'utilisateur actuel).

Vous serez invité à définir un mot de passe pour le fichier PFX, puis à définir le nom du certificat.

Ryan Elkins
la source
1

J'avais le même problème. Mon problème était que l'ordinateur qui avait généré la demande de certificat initiale était tombé en panne avant la fin du processus de validation SSL étendu. J'avais besoin de générer une nouvelle clé privée, puis d'importer le certificat mis à jour depuis le fournisseur de certificats. Si la clé privée n'existe pas sur votre ordinateur, vous ne pouvez pas exporter le certificat au format pfx. Leur option est grisée.

Bill Mahoney
la source
1

Bien qu'il soit probablement plus facile de générer une nouvelle CSR à l'aide d'IIS (comme l'a dit @rainabba), en supposant que vous ayez les certificats intermédiaires, il existe des convertisseurs en ligne - par exemple: https://www.sslshopper.com/ssl-converter. html

Cela vous permettra de créer un PFX à partir de votre certificat et de votre clé privée sans avoir à installer un autre programme.

William
la source
0

Dans la plupart des cas, si vous ne parvenez pas à exporter le certificat en tant que PFX (y compris la clé privée), c'est parce que MMC / IIS ne peut pas trouver / n'a pas accès à la clé privée (utilisée pour générer la CSR). Voici les étapes que j'ai suivies pour résoudre ce problème:

  • Exécutez MMC en tant qu'administrateur
    • Générez la CSR à l'aide de MMC. Suivez ces instructions pour rendre le certificat exportable.
  • Une fois que vous avez obtenu le certificat de l'autorité de certification (crt + p7b), importez-les (Personal \ Certificates et Intermediate Certification Authority \ Certificates)
  • IMPORTANT: cliquez avec le bouton droit sur votre nouveau certificat (Personnel \ Certificats) Toutes les tâches ... Gérez la clé privée et attribuez des autorisations à votre compte ou à Tout le monde (risqué!). Vous pouvez revenir aux autorisations précédentes une fois que vous avez terminé.
  • Maintenant, cliquez avec le bouton droit sur le certificat et sélectionnez Toutes les tâches ... Exporter, et vous devriez pouvoir exporter le certificat, y compris la clé privée, sous forme de fichier PFX, et vous pouvez le télécharger sur Azure!

J'espère que cela t'aides!

Jose Parra
la source
J'ai déjà mon certificat dans Personal \ Certificates, mais avec le clic droit, n'apparaît pas "Gérer la clé privée". Les options que j'obtiens sont: "Demander un certificat avec une nouvelle clé ...", "Renouveler un certificat avec une nouvelle clé ..." et "Exporter" ... Avez-vous une idée de ce qui me manque?
Gabrielizalo
1
Je l'ai corrigé avec le convertisseur de certificat portable de DigiCert: digicert.com/util/…
Gabrielizalo
Vous avez échoué lors de la "génération de la CSR". Si vous disposez déjà de la clé privée, vous n'avez pas besoin de générer de CSR. Veuillez lire la question d'origine.
NickG
0

Je sais que quelques utilisateurs ont parlé d'installer ceci et cela et d'ajouter des programmes de ligne de commande et de télécharger ...

Personnellement, je suis paresseux et je trouve toutes ces méthodes lourdes et lentes, et je ne veux rien télécharger et trouver les bonnes lignes cmd si je n'ai pas à le faire.

La meilleure façon pour moi sur mon serveur IIS personnel est d'utiliser RapidSSLOnline. Il s'agit d'un outil qui se trouve sur un serveur vous permet de télécharger votre certificat et votre clé privée et est capable de générer un fichier pfx pour vous que vous pouvez importer directement dans IIS.

Le lien est ici: https://www.rapidsslonline.com/ssl-tools/ssl-converter.php

Voici les étapes utilisées pour le scénario demandé.

  1. Sélectionnez le type actuel = PEM
  2. Changer pour = PFX
  3. Téléchargez votre certificat
  4. Téléchargez votre clé privée
  5. Si vous avez un certificat CA ROOT ou des certificats intermédiaires, téléchargez-les également
  6. Définissez un mot de passe de votre choix, utilisé dans IIS
  7. Cliquez sur le reCaptcha pour prouver que vous n'êtes pas un bot
  8. Cliquez sur Convertir

Et c'est tout, vous devez télécharger un PFX et l'utiliser dans votre processus d'importation sur IIS.

J'espère que cela aide d'autres personnes de technologie paresseuses et partageant les mêmes idées.

TheNerdyNerd
la source
6
Est-il sûr de télécharger votre certificat sur un site Web tiers qui ne vous a pas délivré le certificat?
Kunal
1
Salut, le SSL rapide, je crois, appartient à GeoTrust. Les deux autorités dans l'obtention d'un certificat. Autant que je sache ... digital.com/ssl-certificates/geotrust digital.com/ssl-certificates/RAPIDSSL en ce qui concerne la sécurité, je pense que ce serait un exploit minime car votre certificat serait généré par un système externe et doivent être encore valables. Dans mon cas, j'ai utilisé le sslforfree.com qui doit être renouvelé tous les 90 jours, mais c'est un petit prix à payer pour un coût inférieur, en particulier pour mon site de démonstration, etc.
TheNerdyNerd
5
@Kunal: Cela pourrait être un moyen simple d'obtenir des fichiers de certificat test / dev, mais le téléchargement de votre clé privée vers une autre partie est un nogo général pour les environnements de production sécurisés.
Stefan
0

Pour les fichiers cfx de SSLForFree, je trouve ce https://decoder.link/converter plus simple.

Assurez-vous simplement que PEM -> PKCS # 12 est sélectionné, puis téléchargez le certificat, ca_bundle et les fichiers de clés et convertissez. N'oubliez pas le mot de passe, puis téléchargez avec le mot de passe que vous avez utilisé et ajoutez des liaisons.

Pete Herc
la source