Nous venons de mettre à niveau nos projets Visual Studio 2008 vers Visual Studio 2010. Tous nos assemblys ont été signés en utilisant 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: companyname.pfx. Le fichier de clé peut être protégé par mot de passe. Pour corriger cela, essayez d'importer à nouveau le certificat ou installez manuellement le certificat dans le CSP Strong Name avec le nom de conteneur de clé suivant: VS_KEY_3E185446540E7F7A
Cela se produit sur certaines machines de développement et pas sur d'autres. Certaines méthodes utilisées pour résoudre ce problème qui fonctionnaient parfois incluent:
- Réinstallation du fichier de clé à partir de l'Explorateur Windows (clic droit sur le fichier PFX et cliquez sur Installer)
- L'installation de Visual Studio 2010 sur une nouvelle machine pour la première fois vous invite à saisir le mot de passe la première fois que vous ouvrez le projet, puis cela fonctionne. Sur les machines mises à niveau à partir de Visual Studio 2008, vous n'obtenez pas cette option.
J'ai essayé d'utiliser l' utilitaire SN.EXE (Strong Name Tool) pour enregistrer la clé avec le Strong Name CSP comme le suggère le message d'erreur, mais chaque fois que j'exécute l'outil avec des options à l'aide de la version fournie avec Visual Studio 2010, SN .EXE répertorie simplement ses arguments de 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 les installations ClickOnce et la signature de code Microsoft.
J'ai découvert un correctif qui vous permet de construire avec succès dans un environnement multi-développeurs:
Au lieu de modifier le mot de passe (ce qui entraîne la modification du fichier .pfx), resélectionnez le fichier .pfx dans la zone de liste déroulante. Cela appelle ensuite la boîte de dialogue de mot de passe. Après avoir entré le mot de passe, le projet se construira OK. Chaque développeur peut le faire sur sa machine locale sans réellement modifier le fichier .pfx.
J'ai toujours des problèmes pour que les assemblys soient signés sur notre machine serveur de build. J'obtiens la même erreur ici, cependant l'utilisation de la méthode sn.exe -i ne résout pas le problème pour le serveur de build.
la source
J'ai eu le même problème et la suppression du magasin et la lecture n'ont pas fonctionné. Je devais faire ce qui suit.
Obtenez une copie d' OpenSSL . Il est disponible pour Windows . Ou utilisez une boîte Linux car ils l'ont tous à peu près tous.
Exécutez ce qui suit pour exporter vers un fichier de clés:
Ensuite, dans les propriétés du projet, vous pouvez utiliser le fichier PFX.
la source
J'ai parlé trop tôt! La reconstruction a remis les erreurs en jeu ...
J'ai trouvé cela fonctionne - faites un clic droit dans l' Explorateur de solutions et l'excluez du projet. Cliquez sur Afficher tous les fichiers , cliquez avec le bouton droit et incluez-le à nouveau dans le projet. Annulez maintenant les modifications en attente ...
Pour une raison quelconque, cela m'a arrangé et était relativement indolore!
la source
J'ai constaté que dans certains cas, vous devriez essayer de supprimer cette clé avant de l' installer. Faites donc ce qui suit:
sn -d VS_XXXX
sn -i mykey.pfx VS_XXX
la source
VSCommands 2010 (plug-in pour Visual Studio) peut résoudre ce problème automatiquement pour vous - faites simplement un clic droit sur l'erreur et cliquez sur Appliquer la correction dans le menu. Vous pouvez l' obtenir à partir de la galerie Visual Studio .
la source
Après avoir essayé toutes ces solutions (et bien plus encore), j'ai constaté que le problème se situe ailleurs. Pour les personnes qui traversent la même misère que moi après avoir acheté un certificat, je partagerai la solution à mon problème.
Comportement
Je comprends que «signe» applique un nom fort et non un code d'authentification à une DLL ou un EXE. Voilà pourquoi signtool va travailler dans ce cas, mais « signe » en studio visuel de travail non.
Raison
Dans le passé, j'ai eu de l'expérience avec les certificats de Verisign. Ils ont un
KeySpec=2
dans le certificat - qui est utilisé avec la fonctionnalité «signer» dans Visual Studio. Ces certificats fonctionnent correctement pour Visual Studio et signtool.J'ai maintenant acheté des certificats de Comodo, qui ont une erreur
KeySpec=1
dans les certificats de signature de code. Cela signifie que ces certificats fonctionnent très bien avec signtool (Authenticode) mais pas avec un nom fort (la liste déroulante des signes).Solution
Il existe deux façons de résoudre ce problème:
sn -k [name].snk
. Signez l'assembly à l'aide du snk et utilisez ensuite signtool avec votre certificat de signature de code pour signer la DLL / EXE avec la signature d'authentode. Bien que cela semble étrange, d'après ce que je comprends, c'est une bonne façon de traiter les certificats, car les noms forts ont un objectif différent de celui d'authentode (voir également ce lien pour plus de détails sur la façon dont cela fonctionne).KeySpec=2
. La procédure à suivre est détaillée 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 se perdra jamais à l'avenir, voici la procédure de la solution 2:
KeySpec=1
) vers un fichier PFX. Remarque: veuillez sauvegarder ce fichier dans un emplacement sûr et tester si le fichier peut être importé correctement sur une autre machine si vous voulez vraiment le lire en toute sécurité!certutil -importPFX -user <pfxfilename> AT_SIGNATURE
Vous devriez maintenant avoir un jeu de clés / certificat avec
KeySpec=2
. Si nécessaire, vous pouvez maintenant l'exporter dans un autre fichier PFX à l'aide de la console MMC.la source
Pour résoudre ce problème dans Visual Studio 2012, je clique avec le bouton droit sur le projet, propriétés -> "signature", puis décochez la case "Signer les manifestes ClickOnce".
la source
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". J'ai enregistré mon projet et j'ai reconstruit.build a réussi.
Enregistrez votre projet et effectuez une reconstruction.
Si vous obtenez un message d'erreur: "Une tentative a été faite de référencer un jeton qui n'existe pas", ignorez-le et continuez les étapes ci-dessous
Cliquez sur le bouton «Changer le mot de passe»:
Saisissez le mot de passe d'origine dans les trois cases 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'informations..
la source
Pour contourner ce problème, 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.
la source
En tant qu'auteur original du travail sur le rapport de bogue de connexion, il existe DEUX variantes de ce message (je l'ai découvert plus tard)
Pour 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 pour importer est lorsque vous signez des codes pour des choses comme le déploiement en un clic (notez que vous pouvez utiliser le même certificat dans les deux cas).
J'espère que cela t'aides.
la source
Rien ne fonctionnait pour moi, mais ensuite je suis allé voir 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 a été compilé.
Voir Signature de manifeste ClickOnce et Signature d'assembly avec nom fort à l'aide de la page de signature du concepteur de projet Visual Studio, Assemblages de signature .
la source
La resélection du fichier de clés dans une zone de liste déroulante et la saisie du mot de passe nous aident à ce sujet.
Mais il faut le faire à chaque fois que le fichier clé change et il semble que ce ne soit pas OK.
la source
J'ai eu le même problème après avoir déplacé mon installation Windows vers un SSD . Aucune des autres solutions n'a fonctionné pour moi.
Ma solution était d'ouvrir le fichier de projet dans le Bloc - notes et de supprimer toutes les références aux clés PFX. Une fois le fichier enregistré, ouvrez la solution dans Visual Studio. Accédez au projet -> Propriétés -> Signature. Vous ne devriez voir aucune clé répertoriée dans la zone de liste déroulante `` Choisissez le fichier de clés de nom fort ''. Dans la zone de liste déroulante, accédez à la clé, sélectionnez-la et votre projet peut maintenant être généré.
la source
Mon problème était que le contrôleur de construction TFS s'exécutait en tant que service réseau et pour une raison quelconque, je ne comprenais pas pourquoi les certificats du service hôte de construction Visual Studio n'étaient pas utilisés. J'ai changé l'identité du service Visual Studio Build en quelque chose de plus gérable, je me suis assuré qu'il avait des droits sur le serveur TFS et j'ai 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.
la source
J'ai eu un problème similaire, mais après avoir sélectionné le pfx dans un ComboBox "Strong key key file" et tapé le mot de passe, j'ai toujours eu une erreur similaire (sans la partie nom du conteneur):
En outre, le panneau d'informations de certificat «Signer les manifestes ClickOnce» n'était pas rempli.
J'ai fait "Select from File ..." sur mon pfx, et cela a résolu le problème.
la source
Toutes les méthodes décrites ici ne m'ont pas aidé. Mais quand j'ai supprimé le fichier * .pfx de mon projet et l'ai ajouté à la signature de l'assembly à nouveau, j'ai construit mon projet avec sans aucune erreur! Je ne peux pas expliquer pourquoi. Mais ça a marché pour moi.
la source
D'accord, cela a fonctionné pour moi. Ouvrez l'ancien solution / projet en tant qu'administrateur dans Visual Studio 2010 et ouvrez la solution / le projet nouveau ou copié. En tant qu'administrateur, supprimez le fichier pfk copié dans la nouvelle solution / projet Visual Studio 2010 et accédez aux propriétés du projet et désélectionnez-le.
Avec les deux projets ouverts, copiez-collez vers le nouveau. Accédez aux propriétés du projet et sélectionnez Générer. J'ai ouvert et fermé Visual Studio et aussi après l'avoir supprimé du nouveau projet, je l'ai construit avant de le copier de l'ancien projet et de le sélectionner. J'ai reçu l'erreur au début de ce message lorsque j'ai copié le projet et essayé de le construire.
la source
Dans mon scénario, le service de génération n'utilisait pas le même compte d'utilisateur que celui avec lequel j'ai importé la clé
sn.exe
.Après avoir changé le compte en mon compte administrateur, tout fonctionne très bien.
la source
Cela a résolu mon problème: ouvrez votre projet VS
Double-cliquez sur Package.appxmanifest
Accédez à l'onglet Emballage
cliquez sur choisir un certificat
cliquez sur configurer le certificat
sélectionnez dans le fichier et utilisez example.pfx cette unité ou tout autre élément créé
la source
J'ai résolu ce problème par moi-même en modifiant la ligne suivante dans le fichier .csproj du projet Visual Studio:
Cela a jeté l'erreur «impossible d'importer»:
La modification de la valeur sur false a fait disparaître l'erreur.
la source
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, la raison de l'erreur était que le mot de passe du certificat n'était pas entré ou entré incorrectement. L'erreur a disparu lorsque j'ai entré le mot de passe dynamiquement correctement. réussi
la source
Malheureusement, aucune approche mentionnée ici n'a fonctionné pour moi. Je dois enregistrer un couple PFX dans un conteneur Docker et je dois passer le mot de passe via la ligne de commande.
J'ai donc re-développé la
sn.exe -i <infile> <container>
commande en C # en utilisant le RSACryptoServiceProvider . La source et l'application se trouvent sur GitHub dans le projet SnInstallPfx .L' application SnInstallPfx accepte une clé PFX et son mot de passe. Il calcule automatiquement le nom du conteneur de clés (VS_KEY_ *) (emprunté au code source MSBuild) et l'installe dans le nom fort CSP.
Usage:
la source
Pour qui utilise les coureurs GitLab:
./gitlab-runner.exe install --user ".\ENTER-YOUR-USERNAME" --password "ENTER-YOUR-PASSWORD"
(j'ai d'abord dû arrêter et désinstaller)sn -i certificate.pfx VS_KEY_C***6
le nom du conteneur est suggéré dans la sortie du Job ayant échoué sur GitLab (sortie msbuild)
la source