Erreur signtool: aucun certificat n'a été trouvé qui répondait à tous les critères donnés avec une application Windows Store?


294

J'essaie de signer un package appx Windows 8 avec un fichier pfx que j'ai. J'utilise une commande comme ça:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"

Et à partir de cela, je reçois:

Erreur SignTool: aucun certificat répondant à tous les critères indiqués n'a été trouvé.

Quels «critères» ne suis-je pas en train de respecter? Il s'agit uniquement de tests, il s'agit donc de certificats auto-signés. J'ai essayé d'importer la clé puis de la signer, mais cela entraîne toujours la même erreur. Comment puis-je réparer ça?


Je pense que cela Signtoolessaie de trouver le certificat dans le magasin de certificats racine de confiance et que vous n'avez aucun certificat de signature de code là-bas.
crea7 ou

15
J'ai eu cette erreur parce que le certificat utilisé pour la signature a expiré
Mark Homer

1
J'ai eu un problème similaire et j'ai posté une réponse ici. J'espère que cela t'aides.
SurenSaluka

Réponses:


590

Lors de l'obtention de cette erreur via Visual Studio, c'était parce qu'il y avait une configuration de certificat de signature pour correspondre à l'ordinateur sur lequel il était initialement développé.

Vous pouvez le vérifier en allant dans 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.

Propriétés de signature

Si vous ne souhaitez pas désactiver cette option, vous devrez installer le certificat.


12
Juste pour ajouter à ce que @JDandChips a suggéré: à des fins de débogage et de test, vous pouvez également utiliser un certificat de test temporaire en cliquant sur le bouton `` Créer un certificat de test '' illustré dans la capture d'écran ci-dessus.
nam

Que voulez-vous dire par "installer le certificat"?
Sean Kendle

Dans ma situation, le certificat était disponible sur la machine sur laquelle il avait été développé à l'origine, je pouvais donc choisir "Sélectionner dans le fichier ..." pour installer le certificat manquant. Alternativement, vous pouvez toujours en créer un nouveau et l'utiliser!
JDandChips

@JDandChips Comment créez-vous un nouveau certificat?
erotavlas

3
Pour les débutants VS. Assurez-vous de cliquer avec le bouton droit sur le projet, pas sur la solution, car cela fera apparaître un menu entièrement différent!
B5A7

109

Essayez avec / debug. 1,2 Comme dans:

signtool sign /debug /f mypfxfile.pfx /p <password> (mydllexectuable).exe

Cela vous aidera à savoir ce qui se passe. Vous devriez obtenir une sortie comme celle-ci:

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 d'autres informations, mais vous devriez avoir l'idée. J'espère que cela t'aides.


1 Veuillez noter: signtoolindique en particulier où l' /debugoption est placée. Il doit aller après la signdéclaration.
2 Notez également: l' /debugoption ne fonctionne qu'avec certaines versions de signtool. La version WDK a l'option, contrairement à la version Windows SDK.


3
Travaille pour moi. Non pas que je comprenne la réponse de signtool, mais / debug a fait ce qu'il fallait. Upvote!
noelicus

1
Cette commande est particulière à l'endroit où vous mettez le / debug Si vous le mettez dans le désordre, il signalera une erreur.
Daniel

12
/ debug ne fonctionne que pour des versions spécifiques de signtool.exe. Celui fourni avec le WDK fournit cette option, celui du SDK Windows ne le fait pas.
Paul Kertscher

3
De plus, / debug doit aller après le signe signtool, pas entre les deux.
Denis V

Montre que mon certificat a expiré. Bon travail.
avantprime le

36

Veuillez toujours vérifier la date d'expiration de votre certificat, car la plupart des certificats ont une date d'expiration. Dans mon cas, le certificat a expiré et j'essayais de construire un projet.


2
Pour vérifier l'expiration du certificat, accédez à la ligne de commande, accédez à l'emplacement de votre certificat, puis entrez certutil -dump mycertificate.pfx. Regardez la dernière entrée car les premières sont l'AC, pas votre certificat de signature de code.
HockeyJ

23

Si vous n'avez pas besoin de signer l'application, faites un clic droit sur votre projet

Project Properties -> Signing -> uncheck "Sign the ClickOnce Manifest"

Aussi, comme le suggère cet article MS,

Si vous utilisez Visual Studio 2008 et ciblez .NET 3.5 et utilisez des mises à jour automatiques, vous pouvez simplement modifier le certificat et déployer une nouvelle version,


1
Vous pouvez également cliquer sur créer un certificat de test pour continuer. merci
MindRoasterMir

16

il suffit de décocher la case "Signer le clic une fois manifesté" dans l'onglet de signature dans les propriétés du projet, cela supprimera l'erreur et vous pourrez en créer une nouvelle à partir de là.


15

Vous avez le même problème, il s'est avéré que la clé privée du certificat n'avait aucune autorisation.
Pour corriger - ouvrez la gestion du certifacte, trouvez votre certificat, faites un clic droit -> Gérer les clés privées puis en sécurité en haut assurez-vous que votre utilisateur est ajouté et dispose des autorisations, qui l'ont corrigé pour moi.


15

Dans mon cas, j'ai le mauvais type de certificat que j'essaie d'associer.
J'avais "Authentification serveur" plutôt que "Signature de code" .
Vous devriez pouvoir le voir dans le composant logiciel enfichable Certificat dans la section Objectif prévu.
Après cela, cela fonctionne très bien.


1
Oui, c'est-à-dire que j'ai eu du mal pendant 2 jours à chercher cette réponse.
Hakan Fıstık

14

Dans le cas où quelqu'un d'autre se heurterait à ceci: Mon problème a fini par être que j'avais besoin d'exécuter l'invite de commande en tant qu'administrateur avant d'utiliser l'application signtool.exe. Ensuite, tout fonctionne à merveille.


11
N'a pas aidé dans mon cas.
bgplaya

1
J'utilise signtool de VS2015 en tant que script et j'étais confronté au même problème. J'ai exécuté le VS2015 en tant qu'administrateur et le signtool a pu signer mon fichier>
hamaney

10

J'ai eu le même problème dans le développement de mon application console et comme solution rapide ,

allez project propertiesensuite,

cliquez sur l' signingonglet et décochez "Signer le manifeste ClickOnce".

Description de l'image:

entrez la description de l'image ici

entrez la description de l'image ici

FYI Vous pouvez également voir cette solution vidéo de moins d'une minute . L'image ci-dessus est prise à partir de la vidéo.


1
Vous pouvez également cliquer sur créer un certificat de test pour continuer. merci
MindRoasterMir

9

J'ai résolu cela en utilisant l' /smindicateur pour spécifier de regarder dans le magasin de la machine au lieu de la valeur par défaut, qui est mon magasin (utilisateur local). En outre, cela peut aider à activer le débogage de signtool à l'aide de /debug.


8

J'ai eu ce problème et je ne sais pas exactement quelle étape ci-dessous l'a fait fonctionner, mais j'espère que cela aide quelqu'un d'autre ... c'est ce que j'ai fait:

  • Installez le certificat téléchargé (.crt) dans les certificats (je le place dans le magasin «personnel») - faites un clic droit sur le fichier .crt et cliquez sur Installer le certificat .
  • Exécutez certmgr.mscet exportez 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 inutiles)
  • Utilisez le fichier .pfx exporté lors de la signature de votre projet
  • Exemple de signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    où le mot de passe est le même que celui fourni lors de l'exportation

1
Merci, cela a fait l'affaire. J'utilisais le .crtfichier fourni par Comodo au lieu d'installer le certificat, puis d'exporter le .pfxfichier.
Joshua Pinter

1
Merci beaucoup!
Bruno Soares

6

J'ai le même problème, en lisant certaines réponses (publiées ici), j'ai vu mon certificat expiré.

Il suffit d'en créer un nouveau à partir de mon projet de démarrage. Ensuite, le gestionnaire de certificats a supprimé le certificat expiré.

Maintenant, tout se passe bien.


5

Les critères incluent le nom du compte (dont il est associé à la clé privée), le domaine, la société, la date d'expiration, les finalités prévues, entre autres.

Il existe de nombreuses raisons possibles pour que cette erreur se produise, certaines ont déjà été répertoriées. Voici une autre astuce: lors de l'importation d'un certificat, assurez-vous de travailler avec le fichier d'origine reçu de l'autorité de certification (CA) , sinon certaines propriétés pourraient être perdues.

Exemple: récemment, j'ai essayé d'importer un certificat exporté depuis un autre compte sur la même machine. Le certificat est devenu visible pour mon compte mais n'était pas associé à mon compte et a par conséquent signtoolrefusé de le reconnaître sans fournir explicitement le nom de fichier et un mot de passe. Ce qui, lorsqu'il est fait dans le cadre du processus de génération et écrit explicitement dans un fichier de commandes ou un fichier source, peut ne pas être suffisamment sécurisé. (L'importation du certificat émis par l'AC d'origine l'a résolu.)


4

J'ai eu le même message « Après le filtre de clé privée, il n'y a plus de certificats » et j'ai passé trop de ma vie à essayer de comprendre ce que le message voulait dire.

Le problème était que j'avais mal installé le certificat dans le magasin de certificats Windows, donc il n'y avait pas de clé privée associée au certificat de signature de code.

Ce que j'aurais dû faire était ceci:

  1. À l'aide de Firefox ou d'Internet Explorer, soumettez la demande à l'émetteur. Cela génère une CLÉ PRIVÉE qui est stockée en silence 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 le font.

  2. Soumettez la demande, parcourez les boucles et les boucles 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.

  3. Téléchargez le certificat (.crt) et importez-le dans le même navigateur . Le navigateur possède désormais à la fois la clé privée et le certificat .

  4. 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.

  5. Conservez une copie de sauvegarde du fichier .p12.

  6. Exécutez le gestionnaire de certificats (certmgr.msc), cliquez avec le bouton droit sur le magasin de certificats personnels , sélectionnez Toutes les tâches / Importer ... et importez le fichier .p12 dans Windows. Il vous sera demandé le mot de passe que vous avez utilisé pour protéger le fichier. À ce stade, en fonction de vos exigences de sécurité, vous pouvez marquer la clé comme 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 des scripts batch.

  7. Exécutez signtool avec succès, respirez un soupir de soulagement et réfléchissez à la quantité de votre vie que vous avez gaspillée en raison de mauvais messages d'erreur et d'une documentation médiocre ou manquante.


2

J'ai aussi eu ce problème, j'ai beaucoup essayé. Utilisé le SDK ainsi que la signature de Visual Studio, mais partout où j'ai obtenu "Aucun certificat n'a été trouvé qui répondait à tous les critères donnés".

Solution: sachez que si "après le filtre de clé privée": "0 gauche" apparaît avec l'option signtool sign / debug ..., la cause est que votre PC n'a pas l'autorité de certification elle-même dans le magasin. Pour résoudre ce problème, installez d'abord l'autorité de certification (dans mon cas, un fichier .crt), puis réexécutez le signe. Cela devrait fonctionner dès maintenant!

Signtool ne peut être utilisé qu'avec une autorité de certification demandée et détenue par le même PC.


Je n'ai eu aucun problème à utiliser signtool avec une autorité de certification provenant d'un autre PC.
bparker

2

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 correspondait pas à mon certificat. Quand j'ai enlevé ça, ça a cessé de se plaindre.


2

J'ai eu un problème similaire, le nom de mon 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 des propriétés de connexion. Cliquez sur "Créer un certificat de test ....". Entrez les informations de mot de passe pour le certificat de test et cliquez sur ok.


2

Avec / debug, lorsque vous obtenez ce message "Après le filtre de clé privée, il ne reste plus de certificats.", Une des raisons pourrait être que le fichier pfx n'a pas la clé privée. Lorsque vous exportez le certificat installé vers un fichier pfx, assurez-vous que la case à cocher inclut également la clé privée.


1

Accédez à project propertiestous les champs et décochez-les Firmavant de lancer la compilation

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.