web-dev-qa-db-fra.com

Impossible d'importer le fichier de clés 'blah.pfx' - erreur 'Le fichier de clés peut être protégé par un mot de passe'

Nous venons de mettre à niveau nos projets Visual Studio 2008 vers Visual Studio 2010. Tous nos assemblages étaient dotés d'une signature forte à l'aide d'un certificat de signature de code Verisign . Depuis la mise à niveau, nous obtenons continuellement l'erreur suivante:

Impossible d'importer le fichier de clé suivant: nomentreprise.pfx. Le fichier de clé peut être protégé par mot de passe. Pour résoudre ce problème, essayez de réimporter le certificat ou installez-le manuellement sur le CSP Nom fort avec le nom de conteneur de clé suivant: VS_KEY_3E185446540E7F7A

Cela se produit sur certaines machines de développement et pas d'autres. Certaines méthodes utilisées pour résoudre ce problème ont parfois fonctionné:

  • Réinstallation du fichier de clé à partir de l'Explorateur Windows (cliquez avec le bouton droit sur le fichier PFX, puis cliquez sur Installer)
  • L'installation de Visual Studio 2010 sur un nouvel ordinateur pour la première fois vous invite à saisir le mot de passe lors de la première ouverture du projet, puis il fonctionne. Sur les machines mises à niveau à partir de Visual Studio 2008, vous ne disposez pas de cette option.

J'ai essayé d'utiliser l'utilitaire SN.EXE (outil de nom fort) pour enregistrer la clé avec le nom de fichier fort CSP comme le suggère le message d'erreur, mais chaque fois que j'exécute l'outil avec des options utilisant la version fourni avec Visual Studio 2010, SN.EXE répertorie simplement ses arguments en ligne de commande au lieu de faire quoi que ce soit. Cela se produit quels que soient les arguments que je fournis.

Pourquoi cela se produit-il et quelles sont les étapes claires pour y remédier? Je suis sur le point d'abandonner ClickOnce installe et signature de code Microsoft.

384
JasonD

Je courais dans ce problème aussi. J'ai pu résoudre le problème en exécutant
_sn -i <KeyFile> <ContainerName>_ ( installe la paire de clés dans un conteneur nommé ).

sn est généralement installé dans le cadre d'un SDK Windows. Par exemple, C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe. Très probablement, cet emplacement ne figure pas dans le chemin de recherche de votre environnement standard. Toutefois, "l'invite de commande du développeur" installée par Visual Studio ajoute des informations supplémentaires qui incluent généralement l'emplacement correct.

Basé sur votre post qui ressemblerait à

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

Cela doit être exécuté à partir de l'emplacement de votre fichier PFX. Si la solution est chargée dans VS 2010, vous pouvez simplement cliquer avec le bouton droit de la souris sur le fichier pfx dans l'explorateur de solutions et choisir Ouvrir l'invite de commande qui lancera l'outil .net 2010 cmd Prompt in. le bon répertoire.

Avant d'exécuter cette commande sn, j'avais réinstallé le pfx en cliquant dessus avec le bouton droit de la souris et en choisissant l'installation, mais cela ne fonctionnait pas. Juste quelque chose à noter car ce pourrait être la combinaison des deux qui a fourni la solution.

J'espère que cela aide à résoudre votre problème.

438

J'ai découvert un correctif qui vous aide à construire correctement dans un environnement multi-développeurs:

Au lieu de changer le mot de passe (ce qui entraîne la modification de .pfx), resélectionnez le fichier .pfx de la liste déroulante. Ceci appelle ensuite le dialogue de mot de passe. Après avoir entré le mot de passe, le projet va construire OK. Chaque développeur peut le faire sur sa machine locale sans modifier réellement le fichier .pfx.

Je n'arrive toujours pas à faire signer les assemblys sur notre machine serveur. J'obtiens la même erreur ici, mais l'utilisation de la méthode sn.exe -i ne résout pas le problème du serveur de génération.

122
MagicBox

J'ai eu le même problème et la suppression du magasin et la lecture ne fonctionnaient pas. Je devais faire ce qui suit.

  • Obtenez une copie de OpenSSL . C'est disponible pour Windows . Ou utilisez une machine Linux comme ils l’ont presque tous.

  • Exécutez ce qui suit pour exporter dans un fichier de clé:

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

Ensuite, dans les propriétés du projet, vous pouvez utiliser le fichier PFX.

40
Beached

J'ai parlé trop tôt! Rebuild a remis les erreurs en jeu ...

J'ai trouvé cela fonctionne - clic droit dans Explorateur de solutions et l'exclure du projet. Cliquez sur Afficher tous les fichiers , cliquez avec le bouton droit de la souris et incluez-le à nouveau dans le projet. Annulez maintenant les modifications en attente ...

Pour une raison quelconque, cela a réglé pour moi et était relativement indolore!

35
Mike F

VSCommands 2010 (plugin pour Visual Studio) peut résoudre ce problème automatiquement - il suffit de cliquer avec le bouton droit de la souris sur l'erreur et de cliquer sur Appliquer le correctif dans le menu. Vous pouvez l'obtenir de la galerie Visual Studio .

31
Jarek Kardas

J'ai trouvé que dans certains cas, vous devriez essayer de supprimer cette clé avant vous l'installez. Alors faites ce qui suit:

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX
31
Dariusz

Après avoir essayé toutes ces solutions (et bien d’autres encore), j’ai trouvé que le problème se trouvait ailleurs. Pour les personnes qui vivent la même misère que moi après avoir acheté un certificat, je vais partager la solution à mon problème.

Comportement

Je comprends que "signer" applique un nom fort et non un authentification à un DLL ou à un EXE. C'est pourquoi signtool fonctionnera dans ce cas , mais le paramètre 'sign' dans Visual studio ne fonctionnera pas.

Raison

Dans le passé, j'ai eu l'expérience de certificats de Verisign. Ils ont un KeySpec=2 dans le certificat, qui est utilisé avec la fonctionnalité de "signature" dans Visual Studio. Ces certificats fonctionnent correctement pour Visual Studio et Signtool.

J'ai maintenant acheté des certificats de Comodo, qui ont un KeySpec=1 incorrect dans les certificats de signature de code. Cela signifie que ces certificats fonctionnent correctement avec signtool (authenticode), mais pas avec une désignation forte (liste déroulante des signes).

Solution

Il y a deux façons de résoudre ce problème:

  1. Créez un certificat distinct pour votre nom fort à l'aide de sn -k [name].snk. Signez l’Assembly à l’aide de snk, puis utilisez signtool avec votre certificat de signature de code pour signer le fichier DLL/EXE avec la signature d’authentique. Bien que cela semble étrange, d’après ce que je comprends, c’est une manière correcte de traiter les certificats, car les noms forts ont un objectif différent de l’authentode (voir aussi ce lien pour plus de détails sur le fonctionnement).
  2. Importez votre certificat en tant que KeySpec=2. La procédure à suivre est détaillé ici .

Parce que je veux utiliser plusieurs noms forts, j'utilise actuellement l'option (1), bien que l'option (2) fonctionne également.


Pour vous assurer que cette solution ne sera jamais perdue à l'avenir, voici la procédure de la solution 2:

  1. À l'aide de "Certifiates" MMC, exportez le jeu de clés existant (KeySpec=1) dans un fichier PFX. Remarque: Veuillez sauvegarder ce fichier dans un emplacement sûr et vérifier si le fichier peut être importé correctement sur un autre ordinateur si vous souhaitez vraiment le lire en toute sécurité!
  2. Supprimez le certificat existant du crypto store (stlll à l'aide de la MMC).
  3. Ouvrez une invite CMD.
  4. Importez le fichier PFX en utilisant cette commande:
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. Entrez la phrase secrète du pfx lorsque vous y êtes invité.

Vous devriez maintenant avoir un jeu de clés/certificat avec KeySpec=2. Si nécessaire, vous pouvez maintenant exporter ceci dans un autre fichier PFX en utilisant à nouveau le MMC.

26
atlaste

Pour résoudre ce problème dans Visual Studio 2012, je clique avec le bouton droit de la souris sur le projet, propriétés -> "signature", puis décochez la case "Signer les manifestes ClickOnce".

9
Romeo

J'ai resélectionné le fichier de clé (pfx) dans la liste déroulante "Choisir un fichier de clé de nom fort", puis fourni le mot de passe dans la fenêtre contextuelle "ENTRER MOT DE PASSE". A enregistré mon projet et reconstruit.build a réussi.

  • Ouvrez les propriétés du projet.
  • Cliquez sur la section Signature.
  • Où il est indiqué "Choisissez un fichier de clé de nom fort", resélectionnez la valeur actuelle dans la liste déroulante:

enter image description here

  • Visual Studio va maintenant vous demander le mot de passe. Entrez-le.

enter image description here

  • Enregistrez votre projet et effectuez une reconstruction.

  • Si get message d'erreur: "Une tentative de référence à un jeton qui n'existe pas" a été ignorée et continuez comme indiqué ci-dessous.

  • Cliquez sur le bouton "Changer le mot de passe":

enter image description here

  • Entrez le mot de passe d'origine dans les trois zones et cliquez sur OK. Si vous souhaitez modifier votre mot de passe (ou si votre ancien mot de passe ne répond pas aux exigences de complexité), vous pouvez le faire maintenant.

  • Enregistrez votre projet et effectuez une reconstruction.

Plus d'infos ..

8
Bala Kumar

En guise de solution de contournement, j'ai essayé d'exécuter Visual Studio 2010 en tant qu'administrateur et cela a fonctionné pour moi.

J'espère que ça aide.

6
user350076

En tant qu'auteur original du travail sur le rapport de bogue de connexion, il existe DEUX variantes de ce message (j'ai découvert plus tard)

Dans une variante, vous utilisez sn.exe (généralement si vous utilisez un nom fort) pour importer la clé dans le magasin de noms forts.

L'autre variante pour laquelle vous utilisez certmgr à importer concerne les codes tels que le déploiement "clic-une fois" (notez que vous pouvez utiliser le même certificat dans les deux cas).

J'espère que cela t'aides.

4
PeterI

Rien ne fonctionnait pour moi, mais ensuite je me suis penché sur le gestionnaire de certificats (mmc.exe). Le certificat n'a pas été importé dans le magasin personnel. Je l'ai donc importé manuellement, puis le projet compilé.

Voir Signature du manifeste ClickOnce et signature de l'assembly avec nom fort à l'aide de la page de signature de Visual Studio Project Designer, des assemblages de signature.

3
Samuel

Mon problème était que TFS Build Controller s'exécutait en tant que service réseau et pour une raison quelconque, je ne comprenais pas pourquoi les certificats de service Visual Studio Build Host n'étaient pas utilisés. J'ai modifié l'identité du service Visual Studio Build pour le rendre plus gérable, j'ai vérifié qu'il avait des droits sur le serveur TFS et ajouté manuellement les certificats à l'aide de la console MMC.

Le problème était également que MSBuild ne pouvait pas ajouter les certificats protégés par mot de passe au magasin.

2
Sentinel

J'ai eu le même problème après avoir déplacé mon installation de Windows vers un SSD . Aucune des autres solutions n'a fonctionné pour moi.

Ma solution a été d'ouvrir le fichier de projet dans Notepad et de supprimer toutes les références aux clés PFX. Une fois le fichier enregistré, ouvrez la solution dans Visual Studio. Aller au projet -> Propriétés -> Signature. Vous ne devriez voir aucune des clés répertoriées dans la zone de liste déroulante "choisir le fichier de clé du nom fort". Dans la liste déroulante, accédez à la clé, sélectionnez-la et votre projet peut maintenant être construit.

2
GoalMaker

Resélectionner le fichier de clé dans une liste déroulante et entrer le mot de passe nous aide pour cela.

Mais il est nécessaire de faire chaque fois que le fichier de clé change et cela ne semble pas être correct.

2
user1113289

Ok, cela a fonctionné pour moi. Ouvrez l'ancienne solution/projet en tant qu'administrateur dans Visual Studio 2010, puis ouvrez la solution/le projet copié ou nouveau. En tant qu'administrateur, supprimez le fichier pfk copié dans la nouvelle solution/projet Visual Studio 2010, accédez aux propriétés du projet et désélectionnez-le.

Lorsque les deux projets sont ouverts, copiez-les dans le nouveau. Accédez aux propriétés du projet et sélectionnez Générer. J'ai ouvert et fermé Visual Studio et après l'avoir supprimé du nouveau projet, je l'ai construit avant de le copier depuis l'ancien projet et de le sélectionner. J'ai reçu l'erreur au début de ce post en premier lorsque j'ai copié le projet et essayé de le construire.

1
Jason Robertson

J'ai eu un problème similaire, mais après avoir sélectionné le pfx dans un ComboBox "Fichier de nom fort" et tapé le mot de passe, j'ai toujours une erreur similaire (sans la partie du nom du conteneur):

Impossible d'importer le fichier de clé suivant: nomentreprise.pfx. Le fichier de clé peut être protégé par mot de passe. Pour corriger cela, essayez à nouveau d'importer le certificat ou installez-le manuellement.

En outre, le panneau d'informations sur le certificat "Signer les manifestes ClickOnce" n'a pas été renseigné.

J'ai fait "Select from File ..." sur mon pfx, et cela a résolu le problème.

1
surfen

Dans mon scénario, le service de génération n'utilisait pas le même compte d'utilisateur que celui pour lequel j'ai importé la clé avec sn.exe.

Après avoir changé le compte sur mon compte administrateur, tout fonctionne correctement.

Toutes les méthodes décrites ici ne m'ont pas aidé. Mais lorsque j'ai supprimé le fichier * .pfx de mon projet et que je l'ai ajouté à la signature de l'Assemblée, j'ai construit mon projet sans erreur! Je ne peux pas expliquer pourquoi. Mais cela a fonctionné pour moi.

1
Peter Barbanyaga

Ceci a résolu mon problème: ouvrez votre projet VS

Double-cliquez sur Package.appxmanifest

Aller à l'onglet Emballage

cliquez sur choisir le certificat

cliquez sur configurer le certificat

sélectionnez dans le fichier et utilisez exemple.pfx cette unité ou toute autre chose créée

1
Milad Xandi

J'ai eu la même erreur. Dans mon cas, j'ai essayé tout ce qui précède, mais je n'ai pas pu obtenir le résultat.

J'ai finalement réalisé que dans mon cas, l'erreur était due au fait que le mot de passe du certificat n'avait pas été entré ou entré incorrectement. L'erreur a disparu lorsque j'ai saisi correctement le mot de passe de manière dynamique. réussi

0
Hamit YILDIRIM

J'ai moi-même résolu ce problème en modifiant la ligne suivante dans le fichier .csproj du projet Visual Studio:

Cela a jeté l'erreur 'impossible d'importer':

<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>

Changer la valeur en false a fait disparaître l'erreur.

0
Kyle Julé