Impossible d'importer le fichier 'bla.pfx '- error 'le fichier clé peut être protégé par mot de passe'
nous venons de mettre à jour nos projets Visual Studio 2008 en Visual Studio 2010. Toutes nos assemblées étaient solidement signées avec un certificat de signature de code Verisign . Depuis la mise à niveau, nous avons continuellement l'erreur suivante:
ne peut pas importer le fichier clé suivant: companyname.pfx. Le fichier clé peut être protégé par mot de passe. Pour corriger cela, essayer d'importer le certificat à nouveau ou installer manuellement le certificat à la forte Nom CSP with the following key container nom: VS_KEY_3E185446540E7F7A
cela se produit sur certaines machines de développement et pas d'autres. Certaines méthodes utilisées pour corriger cela qui a fonctionné une partie du temps comprennent:
- Re-installer le fichier de clé à partir de l'Explorateur Windows (clic droit sur le fichier PFX et cliquez sur Installer)
- installer Visual Studio 2010 sur une nouvelle machine vous invite pour la première fois mot de passe la première fois que vous ouvrez le projet, puis il fonctionne. Sur les machines mises à jour depuis Visual Studio 2008, vous n'avez pas cette option.
j'ai essayé d'utiliser le SN.EXE utilitaire (outil de nom fort) pour enregistrer la clé avec le nom fort CSP comme le suggère le message d'erreur, mais chaque fois que j'exécute l'outil avec n'importe quelles options en utilisant la version qui est venue avec Visual Studio 2010, SN.EXE ne fait que lister ses arguments en ligne de commande au lieu de faire quoi. Cela se produit indépendamment des 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 installs et Microsoft code signing.
22 réponses
j'ai rencontré ce problème aussi.
J'ai réussi à résoudre le problème en lançant
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 endroit n'est pas sur le chemin de recherche pour votre environnement standard. Cependant, le" Developer Command Prompt " installé par Visual Studio ajoute information qui comprend habituellement le bon emplacement.
basé sur votre message qui ressemblerait à
sn -i companyname.pfx VS_KEY_3E185446540E7F7A
cela doit être exécuté à partir de l'emplacement de votre fichier PFX, si vous avez la solution chargée dans VS 2010, vous pouvez simplement faire un clic droit sur le fichier pfx de l'Explorateur de solutions et choisir L'invite de commande ouverte qui lancera l'outil d'invite cmd 2010.net dans le répertoire correct.
avant d'exécuter cette commande sn, j'ai réinstallé le pfx en cliquant avec le bouton droit de la souris et en choisissant install, mais cela n'a pas fonctionné. Juste quelque chose à noter qu'il peut être la combinaison des deux qui a fourni la solution.
J'espère que cela aidera à résoudre votre problème.
j'ai découvert une solution qui vous aide à construire avec succès dans un environnement multi-développeurs:
au lieu de changer le mot de passe (ce qui provoque le .pfx être changé), resélectionner .fichier pfx à partir de la liste déroulante. Cela déclenche alors la boîte de dialogue Mot de passe. Après avoir entré le mot de passe, le projet construira OK. Chaque dev peut le faire sur sa machine locale sans modifier la .fichier pfx.
je suis toujours avoir des problèmes pour faire signer des assemblages sur notre machine de serveur de construction. J'obtiens la même erreur là, Cependant en utilisant le sn.la méthode exe-i ne règle pas le problème pour le buildserver.
j'ai eu le même problème et supprimer le magasin et la lecture n'a pas fonctionné. J'ai eu à faire ce qui suit.
-
obtenir une copie de OpenSSL . Il est disponible pour Windows . Ou utilisez une machine Linux car ils l'ont tous à peu près tous.
-
exécutez ce qui suit pour exporter vers un fichier clé:
openssl pkcs12 -in certfile.pfx -out backupcertfile.key openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
puis en les propriétés du projet vous pouvez utiliser le fichier PFX.
VSCommands 2010 (plugin pour Visual Studio) peut corriger cela pour vous automatiquement - juste droit-cliquez sur erreur et cliquez sur Appliquer corriger à partir du menu. Vous pouvez obtenir de Visual Studio gallery .
j'ai parlé trop tôt! La reconstruction a remis les erreurs en jeu...
j'ai trouvé cela fonctionne - clic droit dans Solution Explorer et l'exclure du projet. Cliquez sur afficher tous les fichiers , clic droit et maintenant l'inclure dans le projet à nouveau. Annulez les changements en cours...
Pour certaines raisons, cette triés pour moi et a été relativement indolore!
j'ai trouvé que dans certains cas, vous devez essayer de supprimer cette clé avant vous l'installer. Il en va de même pour ce qui suit:
-
sn -d VS_XXXX
-
sn -i mykey.pfx VS_XXX
après avoir essayé toutes ces solutions (et bien plus encore), j'ai découvert que le problème se trouvait ailleurs. Pour les gens qui traversent la même misère que moi après avoir acheté un certificat, je partagerai la solution pour mon problème.
Comportement
je comprends que le "signe" s'applique à un nom fort et pas un authenticode pour une DLL ou EXE. C'est pourquoi signtool va travailler dans ce cas, mais "signer" dans Visual studio ne fonctionnera pas.
raison
par le passé, J'ai de l'expérience avec les certificats de Verisign. Ils ont un KeySpec=2
dans le certificat - qui est utilisé avec la fonctionnalité "signe" dans Visual Studio. Ces certificats fonctionnent très bien 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 bien avec signtool (authenticode) mais pas avec un nom fort (le signe drop-down).
Solution
Il y a deux façons de résoudre ce problème:
- créez un certificat séparé pour votre nom fort en utilisant
sn -k [name].snk
. Signer L'assemblée en utilisant le snk et ensuite utiliser signtool avec votre certificat de signature de code pour faire signer le DLL / EXE avec le signature d'authentification. Bien que cela semble étrange, d'après ce que j'ai compris, c'est une façon correcte de traiter les certificats, parce que les noms forts ont un but différent que le code authentique (voir aussi ce lien pour plus de détails sur la façon dont cela fonctionne). - importer votre certificat en tant que
KeySpec=2
. La procédure pour cela est détaillé ici .
parce que je veux utiliser plusieurs noms forts, Je utilisez actuellement l'option (1), bien que l'option (2) fonctionne également.
pour s'assurer que cette solution ne sera jamais perdue à l'avenir, Voici la procédure de la solution 2:
- en utilisant le "Certificates" MMC exporter la clé existante (
KeySpec=1
) dans un fichier PFX. Remarque: Veuillez sauvegarder ce fichier à un endroit sûr et de tester si le fichier peut être importé ok sur une autre machine si vous voulez vraiment jouer la sécurité! - supprimer le certificat existant de la mémoire cryptographique (stlll en utilisant le MMC).
- ouvrez une invite CMD.
- importer le fichier PFX en utilisant cette commande:
-
certutil -importPFX -user <pfxfilename> AT_SIGNATURE
- entrer la phrase de passe pour le pfx quand demandé.
-
vous devez maintenant avoir une clé/certificat avec KeySpec=2
. Si nécessaire, vous pouvez maintenant exporter en un autre fichier PFX utilisant le MMC à nouveau.
pour résoudre ce problème dans Visual Studio 2012, je fais un clic droit sur le Projet, Propriétés - > "signer", puis décocher la"signer les manifestes ClickOnce".
comme solution de contournement, j'ai essayé D'exécuter le Visual Studio 2010 en tant qu'administrateur, et cela a fonctionné pour moi.
j'espère que cela aidera.
en tant qu'auteur original du travail sur le rapport de bogue de connect, il y a deux variantes de ce message (j'ai découvert plus tard)
Pour une variante vous utilisez sn.exe (généralement si vous faites des noms forts) pour importer la clé du magasin de noms forts.
l'autre variante pour laquelle vous utilisez certmgr pour importer est quand vous codesignez pour des choses comme click-once deployment (notez que vous pouvez utiliser le même cert pour les deux buts).
Espérons que cette aide.
rien ne fonctionnait pour moi, mais je suis allé voir le Gestionnaire des certificats (mmc.EXE.) Le certificat n'a pas été importé dans le magasin personnel, j'ai donc importé manuellement puis le projet compilé.
j'ai resélectionné le fichier de clés(pfx) dans la boîte déroulante" Choisir un fichier de clés de nom fort", puis j'ai fourni le mot de passe dans la fenêtre Popup" entrer le mot de passe". Enregistré mon projet et n'a reconstruire.construire réussi.
- Ouvrir Les Propriétés Du Projet.
- cliquez sur la section de signature.
- Où il est dit " Choisissez une clé de nom de fichier:’, sélectionnez à nouveau la valeur actuelle de la zone de liste déroulante:
- Visual Studio va maintenant vous demander le mot de passe. Y entrer.
-
Enregistrer votre projet et le faire d'une reconstruction.
-
si le message d'erreur get:"une tentative a été faite pour référencer un token qui n'existe pas" ignorez-le simplement et continuer les étapes ci-dessous
-
cliquez sur le bouton" Modifier le mot de passe":
-
entrez le mot de passe original dans les trois cases et cliquez sur OK. Si vous souhaitez changer votre mot de passe (ou si votre ancien mot de passe ne répond pas aux exigences de complexité), vous pouvez le faire maintenant.
-
Enregistrer votre projet et le faire d'une reconstruction.
resélectionner un fichier clé dans une combobox et entrer un mot de passe nous aide à le faire.
mais il est nécessaire de faire à chaque fois que le fichier clé change et il semble ne pas être OK.
j'ai eu le même problème après avoir déplacé mon installation de fenêtres sur un SSD . Aucune des autres solutions n'a fonctionné pour moi.
ma solution était d'ouvrir le dossier de projet dans Bloc-notes et de supprimer toutes les références aux touches PFX. Une fois le fichier sauvegardé, ouvrez la solution dans Visual Studio. Aller au Projet - > Propriétés - > signature. Vous ne devriez voir aucune des clés listées dans la boîte bascule 'choisissez le nom fort du fichier clé'. Dans la liste déroulante boîte, accédez à la clé, sélectionnez-le, et votre projet peut être construit.
mon problème était que le contrôleur de construction TFS fonctionnait comme un service réseau et pour une raison quelconque Je ne comprenais pas pourquoi les certificats de service Hôte de construction Visual Studio n'étaient pas utilisés. J'ai changé L'identité du service de construction de Visual Studio en quelque chose de plus gérable, j'ai vérifié qu'il avait les droits sur le serveur TFS, et j'ai ajouté manuellement les certificats en utilisant le MMC.
le problème était aussi que MSBuild ne peut pas ajouter les certificats protégés par mot de passe à magasin.
toutes les méthodes décrites ici ne m'ont pas aidé. Mais quand j'ai supprimé le *.pfx fichier de mon projet et l'a ajouté à la signature de l'assemblée à nouveau, j'ai construit mon projet avec sans aucune erreur! Je ne peux pas expliquer pourquoi. Mais il a travaillé pour moi.
Ok, ça a marché pour moi. Ouvrez L'ancienne solution/projet en tant qu'administrateur dans Visual Studio 2010 et ouvrez la nouvelle solution/projet copié. En tant qu'administrateur, supprimez le fichier pfk copié dans la nouvelle solution/projet Visual Studio 2010 et allez dans Propriétés du projet et désélectionnez-le.
avec les deux projets ouverts, copier coller sur le nouveau. Allez à Propriétés du projet et sélectionnez construire. J'ai ouvert et fermé Visual Studio et aussi après avoir retiré du nouveau projet construit avant de le copier à partir de l'ancien projet et de sélection. J'ai reçu le message d'erreur au début de ce post, d'abord quand j'ai copié le projet et a essayé de le construire.
j'ai eu un problème similaire, mais après avoir sélectionné le pfx dans un" fichier de clé de nom fort "ComboBox et en tapant le mot de passe j'ai encore eu une erreur similaire (sans la partie de nom de conteneur):
ne peut pas importer le fichier clé suivant: companyname.pfx. Le fichier clé peut être protégé par mot de passe. Pour corriger cela, essayer d'importer le certificat à nouveau ou installer manuellement le certificat
aussi, le " signe le ClickOnce manifeste" le panneau d'information du certificat n'était pas rempli.
I did" sélectionner dans le fichier..."sur mon pfx, et il a résolu le problème.
cela a résolu mon problème: Ouvrez votre projet VS
double-cliquez sur Package.appxmanifest
allez à L'onglet emballage
cliquez sur Choisir le certificat
cliquez sur Configurer le certificat
sélectionner dans le fichier et utiliser l'exemple.pfx que l'unité ou autre chose créée
dans mon scénario, le service de construction n'utilisait pas le même compte d'utilisateur que celui avec lequel j'ai importé la clé en utilisant sn.exe
.
Après avoir changé le compte à mon compte administrateur, tout fonctionne très bien.
j'ai résolu ce problème par moi-même en changeant la ligne suivante dans le projet de studio visuel .dossier csproj:
cela a jeté l'erreur "ne peut pas importer":
<PropertyGroup>
<SignManifests>true</SignManifests>
</PropertyGroup>
le fait de changer la valeur en false a fait disparaître l'erreur.
FYI
j'ai utilisé le sn.exe avec l'indicateur -p
vers le code officiel du fichier PFX (acheté comme signature de code) comme ci-dessous qui a créé le fichier SNK
et dans Visual Studio 2013
que le fichier SNK
a été parcouru pour être utilisé.
- qui a résolu le problème du mot de passe.
, Mais le problème est qu'il ne cesse de dire: "Le fichier *..SNK ne contient pas de paire de clés publiques/privées."