Donc, j'essaie de signer un paquet appx Windows 8 avec un fichier pfx que j'ai. J'utilise une commande comme celle-ci:
signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
Et de cela, je reçois:
Erreur SignTool: Aucun certificat répondant à tous les critères n’a été trouvé.
Quels sont les "critères" que je ne rencontre pas? Ceci est uniquement à des fins de test, il s'agit donc de certificats auto-signés. J'ai essayé d'importer la clé puis de la signer, mais la même erreur est toujours générée. Comment puis-je réparer ça?
Lors de l'obtention de cette erreur par Visual Studio, c'était parce qu'il y avait une configuration de certificat de signature correspondant à l'ordinateur sur lequel elle avait été initialement développée.
Vous pouvez le vérifier en accédant à l'onglet Propriétés du projet> Signature et en vérifiant les détails du certificat.
Vous pouvez décocher "Signer les manifestes ClickOnce" pour désactiver la signature.
Si vous ne souhaitez pas désactiver cette option, vous devrez installer le certificat.
Essayez avec/debug.1,2 Un péché :
signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe
Cela vous aidera à savoir ce qui se passe. Vous devriez obtenir une sortie comme ceci:
The following certificates were considered:
Issued to: <issuer>
Issued by: <certificate authority> Class 2 Primary Intermediate Server CA
Expires: Sun Mar 01 14:18:23 2015
SHA1 hash: DD0000000000000000000000000000000000D93E
Issued to: <certificate authority> Certification Authority
Issued by: <certificate authority> Certification Authority
Expires: Wed Sep 17 12:46:36 2036
SHA1 hash: 3E0000000000000000000000000000000000000F
After EKU filter, 2 certs were left.
After expiry filter, 2 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
Vous pouvez voir quel filtre empêche votre certificat de fonctionner ou si aucun certificat n'a été pris en compte.
J'ai changé les hachages et autres informations, mais vous devriez avoir l'idée. J'espère que cela t'aides.
1 Remarque: signtool
indique en particulier où est placée l'option /debug
. Cela doit aller après la déclaration sign
.
2 Remarque: l'option /debug
ne fonctionne qu'avec certaines versions de signtool
. La version WDK a l'option, contrairement à la version Windows SDK.
Veuillez toujours vérifier la date d'expiration de votre certificat en premier car la plupart des certificats ont une date d'expiration. Dans mon cas, le certificat a expiré et j'essayais de construire le projet.
décochez simplement la case "Signer le clic une fois" dans l'onglet Signature des propriétés du projet, cela supprimera l'erreur et vous pourrez en créer une nouvelle à partir de là.
Vous avez le même problème, il s'est avéré que la clé privée du certificat n'avait pas d'autorisation.
Pour corriger - ouvrez la gestion de certifacte, trouvez votre certificat, faites un clic droit -> Gérer les clés privées puis, en toute sécurité, assurez-vous que votre utilisateur est ajouté et que des autorisations lui ont été attribuées, ce qui l'a corrigé pour moi.
Au cas où quelqu'un d'autre se heurterait à ceci: Mon problème était que je devais exécuter la commande Invite en tant qu'administrateur avant d'utiliser l'application signtool.exe. Ensuite, tout fonctionne à merveille.
Dans mon cas, le type de certificat que je tente d'associer est incorrect.
J'avais "Authentification du serveur" plutôt que "Signature du code" .
Vous devriez pouvoir le voir dans la capture de certificat dans la section des fins prévues.
Après cela, ça fonctionne bien.
J'ai eu ce problème et je ne sais pas trop quelle étape ci-dessous a fonctionné, mais j'espère que cela aidera quelqu'un d'autre ... voici ce que j'ai fait:
certmgr.msc
et export le certificat (trouvé dans le magasin que vous avez utilisé à la 1ère étape) en tant que fichier pfx, y compris la clé privée et les propriétés étendues (probablement inutile).signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
J'ai résolu ce problème en utilisant l'indicateur /sm
pour spécifier de rechercher dans le magasin de l'ordinateur au lieu du magasin par défaut, mon magasin (utilisateur local). En outre, il peut être utile d'activer le débogage pour signtool en utilisant /debug
.
J'ai le même problème en lisant certaines réponses (posté ici), j'ai vu mon certificat expiré.
Il suffit de créer un nouveau à partir de mon projet de départ. Ensuite, dans le gestionnaire de certificats, a supprimé le certificat expiré.
Maintenant tout compile bien.
Les critères incluent le nom du compte (à la clé privée auquel elle est associée), le domaine, la société, la date d'expiration, les objectifs visés, entre autres.
Il existe de nombreuses raisons possibles pour que cette erreur se produise, certaines ont déjà été répertoriées. Voici un autre conseil: lors de l’importation d’un certificat, veillez à manipuler le fichier original reçu de l’autorité de certification (CA) , faute de quoi certaines propriétés pourraient être perdues.
Exemple: récemment, j'ai essayé d'importer un certificat exporté depuis un compte différent sur le même ordinateur. Le certificat est devenu visible pour mon compte mais n'a pas été associé à mon compte et, par conséquent, signtool
a refusé de le reconnaître sans fournir explicitement le nom de fichier et le mot de passe. Ce qui, une fois fait dans le cadre du processus de construction et écrit explicitement dans un fichier de commandes ou un fichier source, peut ne pas être suffisamment sécurisé. (L'importation du certificat d'origine émis par une autorité de certification l'a résolu.)
Mon problème a fini par être que je ne comprenais pas les options signtool. J'avais fourni l'option/n avec quelque chose qui ne correspond pas à mon certificat. Quand j'ai enlevé ça ça a cessé de se plaindre.
J'ai eu ce problème aussi, beaucoup essayé. Utilisation du SDK ainsi que de la signature de Visual Studio, mais partout où j'ai obtenu le message "Aucun certificat répondant à tous les critères n'a été trouvé".
Solution: Sachez que, si "après le filtre de clé privée": "0 à gauche" s’affiche avec l’option signtool sign/debug ..., la cause est que votre PC n’a pas l’autorité de certification en magasin. Pour résoudre ce problème, installez d'abord l'autorité de certification (dans mon cas, un fichier .crt), puis renouvelez la signature. Cela devrait fonctionner maintenant!
Signtool uniquement peut être utilisé avec une autorité de certification qui appartient au même PC.
J'ai eu un problème similaire: mon nom d'ordinateur a changé et le certificat a expiré. J'ai pu résoudre ce problème en créant un nouveau certificat de test.
Dans Visual Studio, cliquez avec le bouton droit sur le projet dans l'explorateur de solutions. Sélectionnez les propriétés. Sélectionnez la fenêtre de connexion dans les propriétés. Cliquez sur "Créer un certificat de test ....". Entrez les informations de mot de passe pour le certificat de test et cliquez sur ok.
Avec/debug, lorsque vous obtenez le message "Après le filtre de clé privée, il restait 0 certificats.", Une des raisons pourrait être que le fichier pfx ne possède pas la clé privée . Lorsque vous exportez le certificat installé en fichier pfx Veillez à activer la case à cocher pour inclure également la clé privée.
Allez à project properties
et décochez tous les champs de la Firm
avant de commencer la compilation.
J'avais le même message "Après la clé privée", il restait 0 message "et j'ai passé trop de temps dans ma vie à essayer de comprendre ce que le message signifiait.
Le problème était que j'avais installé le certificat de manière incorrecte dans le magasin de certificats Windows, de sorte qu'aucune clé privée n'était associée au certificat de signature de code.
Ce que j'aurais dû faire était ceci:
À l’aide de Firefox ou d’Internet Explorer, envoyez la demande À l’émetteur. Cela génère une clé privée qui est stockée de manière silencieuse par le navigateur (une boîte de dialogue apparaît pendant une fraction de seconde dans Firefox). Notez que d'autres navigateurs peuvent ne pas fonctionner: votre vie est trop courte pour savoir s'ils fonctionnent.
Soumettez la demande, parcourez les cercles de validation de l'émetteur, sacrifiez une chèvre, priez les dieux, soumettez une déclaration signée de vos arrière-grands-parents, etc.
Téléchargez le certificat (.crt) et importez-le dans le même navigateur. Le navigateur a maintenant à la fois la clé privée et le certificat.
Exportez le certificat à partir du navigateur en tant que fichier d'échange d'informations personnelles (.p12). Il vous sera demandé de fournir un mot de passe pour protéger ce fichier.
Conservez une copie de sauvegarde du fichier .p12.
Exécutez le gestionnaire de certificats (certmgr.msc), cliquez avec le bouton droit de la souris sur le magasin de certificats Personal, sélectionnez Toutes les tâches/Importer ... et importez le fichier .p12 dans Windows. Le mot de passe que vous avez utilisé pour protéger le fichier vous sera demandé. À ce stade, en fonction de vos exigences de sécurité, vous pouvez marquer la clé comme étant exportable afin de pouvoir restaurer une copie à partir du magasin Windows. Vous pouvez également indiquer qu'un mot de passe est requis avant utilisation si vous souhaitez interrompre les scripts de traitement par lots.
Exécutez signtool avec succès, respirez un soupir de soulagement et réfléchissez à la quantité de temps que vous avez perdue à cause de messages d'erreur erronés et de documents insuffisants ou manquants.
Si vous ne devez pas signer l'application, faites un clic droit sur votre projet.
Project Properties -> Signing -> uncheck Sign the ClickOnce Manifest
Aussi, comme cet article de MS le suggère,
Si vous utilisez Visual Studio 2008 et que vous ciblez .NET 3.5 et utilisez des mises à jour automatiques, vous pouvez simplement modifier le certificat et déployer une nouvelle version.