Signtool-Fehler: Es wurden keine Zertifikate gefunden, die alle angegebenen Kriterien mit einer Windows Store-App erfüllen.

294

Ich versuche, ein Windows 8-AppX-Paket mit einer Pfx-Datei zu signieren, die ich habe. Ich benutze einen Befehl wie folgt:

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

Und daraus bekomme ich:

SignTool-Fehler: Es wurden keine Zertifikate gefunden, die alle angegebenen Kriterien erfüllen.

Welche "Kriterien" erfülle ich nicht? Dies dient nur zum Testen, es handelt sich also um selbstsignierte Zertifikate. Ich habe versucht, den Schlüssel zu importieren und dann zu signieren, aber es führt immer zum gleichen Fehler. Wie behebe ich das?

Earlz
quelle
Ich denke, Signtooldas versucht, das Zertifikat im vertrauenswürdigen Stammzertifikatspeicher zu finden, und Sie haben dort keine Codesignaturzertifikate.
crea7or
15
Ich hatte diesen Fehler, weil das Zertifikat, das für die Unterzeichnung verwendet wurde, abgelaufen war
Mark Homer
1
Ich hatte ein ähnliches Problem und habe hier eine Antwort gepostet . Hoffe das hilft.
SurenSaluka

Antworten:

590

Als dieser Fehler über Visual Studio angezeigt wurde, wurde ein Signaturzertifikat eingerichtet, das dem Computer entspricht, auf dem es ursprünglich entwickelt wurde.

Sie können dies überprüfen, indem Sie auf die Registerkarte Projekteigenschaften> Signieren gehen und die Zertifikatdetails überprüfen.

Sie können das Kontrollkästchen "ClickOnce-Manifeste signieren" deaktivieren, um die Signatur zu deaktivieren.

Signiereigenschaften

Wenn Sie diese Option nicht deaktivieren möchten, müssen Sie das Zertifikat installieren.

JDandChips
quelle
12
Nur um das hinzuzufügen, was @JDandChips vorgeschlagen hat: Zum Debuggen und Testen können Sie auch ein temporäres Testzertifikat verwenden, indem Sie auf die Schaltfläche "Testzertifikat erstellen" klicken (siehe Abbildung oben).
Nam
Was meinst du mit "Zertifikat installieren"?
Sean Kendle
In meiner Situation war das Zertifikat auf dem Computer verfügbar, auf dem es ursprünglich entwickelt wurde, sodass ich "Aus Datei auswählen ..." auswählen konnte, um das fehlende Zertifikat zu installieren. Alternativ können Sie jederzeit eine neue erstellen und diese verwenden!
JDandChips
@JDandChips Wie erstellen Sie ein neues Zertifikat?
Erotavlas
3
Für VS-Neulinge. Stellen Sie sicher, dass Sie mit der rechten Maustaste auf das Projekt klicken, nicht auf die Lösung, da dadurch ein völlig anderes Menü angezeigt wird!
B5A7
109

Versuchen Sie es mit / debug. 1,2 Wie in:

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

Es wird Ihnen helfen herauszufinden, was los ist. Sie sollten folgende Ausgabe erhalten:

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.

Sie können sehen, welcher Filter dazu führt, dass Ihr Zertifikat nicht funktioniert oder ob keine Zertifikate berücksichtigt wurden.

Ich habe die Hashes und andere Informationen geändert, aber Sie sollten auf die Idee kommen. Hoffe das hilft.


1 Bitte beachten Sie: Hier signtoolgeht es insbesondere darum, wo die /debugOption platziert wird. Es muss nach der signAussage gehen.
2 Beachten Sie auch: Die /debugOption funktioniert nur mit einigen Versionen von signtool. Die WDK-Version bietet die Option, die Windows SDK-Version jedoch nicht.

Daniel
quelle
3
Funktioniert bei mir. Nicht dass ich die Antwort von signtool verstehe, aber / debug hat getan, was es sollte. Upvote!
Noelicus
1
Dieser Befehl bezieht sich insbesondere darauf, wo Sie das / debug ablegen. Wenn Sie es außer Betrieb setzen, wird ein Fehler gemeldet.
Daniel
12
/ debug funktioniert nur für bestimmte Versionen von signtool.exe. Die mit dem WDK gelieferte Option bietet diese Option, die mit dem Windows SDK nicht.
Paul Kertscher
3
Außerdem muss / debug nach dem Signtool-Zeichen stehen, nicht dazwischen.
Denis V
Zeigt an, dass mein Zertifikat abgelaufen ist. Gut gemacht.
Avantprime
36

Bitte überprüfen Sie immer zuerst das Ablaufdatum Ihres Zertifikats, da die meisten Zertifikate ein Ablaufdatum haben. In meinem Fall ist das Zertifikat abgelaufen und ich habe versucht, ein Projekt zu erstellen.

Whizkid
quelle
2
Um den Ablauf des Zertifikats zu überprüfen, rufen Sie die Befehlszeile auf, navigieren Sie zu Ihrem Zertifikat und geben Sie ein certutil -dump mycertificate.pfx. Sehen Sie sich den letzten Eintrag an, da die ersten die Zertifizierungsstelle und nicht Ihr Codesignaturzertifikat sind.
HockeyJ
23

Wenn Sie die App nicht signieren müssen, klicken Sie mit der rechten Maustaste auf Ihr Projekt

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

Auch wie dieser MS-Artikel vorschlägt,

Wenn Sie Visual Studio 2008 verwenden und auf .NET 3.5 abzielen und automatische Updates verwenden, können Sie einfach das Zertifikat ändern und eine neue Version bereitstellen.

nPcomp
quelle
1
Sie können auch auf Testzertifikat erstellen klicken, um fortzufahren. danke
MindRoasterMir
16

Deaktivieren Sie einfach das Kontrollkästchen "Signieren Sie den Klick, sobald er sich manifestiert" auf der Registerkarte "Signieren" in den Projekteigenschaften. Dadurch wird der Fehler behoben und Sie können von dort aus einen neuen erstellen.

Sourav Sharma
quelle
15

Habe das gleiche Problem, stellte sich heraus, dass der private Schlüssel zum Zertifikat keine Berechtigung hatte.
Um dies zu beheben, öffnen Sie die Zertifikatsverwaltung, suchen Sie Ihr Zertifikat, klicken Sie mit der rechten Maustaste auf -> Private Schlüssel verwalten und stellen Sie dann sicherheitshalber sicher, dass Ihr Benutzer hinzugefügt wurde und Berechtigungen erhalten hat, die es für mich behoben haben.

user3740240
quelle
15

In meinem Fall habe ich den falschen Zertifikatstyp, den ich zuordnen möchte.
Ich hatte "Serverauthentifizierung" statt "Codesignatur" .
Sie sollten dies in Certificate Snap im Abschnitt "Verwendungszweck" sehen können.
Danach funktioniert es gut.

Maridob
quelle
1
Ja, das heißt, ich hatte 2 Tage lang Probleme, nach dieser Antwort zu suchen.
Hakan Fıstık
14

Für den Fall, dass jemand anderes darauf stößt: Mein Problem bestand darin, dass ich die Eingabeaufforderung als Administrator ausführen musste, bevor ich die App signtool.exe verwenden konnte. Dann funktioniert alles wunderbar.

Dave
quelle
11
Hat in meinem Fall nicht geholfen.
Bgplaya
1
Ich führe signtool von VS2015 als Skript aus und hatte das gleiche Problem. Ich habe den VS2015 als Administrator ausgeführt und das Signtool konnte meine Datei signieren>
hamaney
10

Ich habe das gleiche Problem in meiner Konsolenanwendungsentwicklung und als schnelle Problemumgehung :

gehe zu project properties dann,

klicke auf signing Registerkarte und deaktivieren Sie "SignO für das ClickOnce-Manifest".

Bildbeschreibung:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Zu Ihrer Information Sie können diese weniger als eine Minute dauernde Videolösung auch sehen . Das obige Bild stammt aus dem Video.

Muhammad Faizan Khan
quelle
1
Sie können auch auf Testzertifikat erstellen klicken, um fortzufahren. danke
MindRoasterMir
9

Ich habe dieses Problem gelöst, indem ich mithilfe des /smFlags angegeben habe, dass im Maschinenspeicher gesucht werden soll, anstatt im Standardspeicher, der Mein (lokaler Benutzer) Speicher ist. Es kann auch hilfreich sein, das Debugging für signtool mithilfe von zu aktivieren /debug.

jle
quelle
8

Ich hatte dieses Problem und bin mir nicht ganz sicher, durch welchen Schritt es funktioniert hat, aber ich hoffe, das hilft jemand anderem ... das habe ich getan:

  • Installieren Sie das heruntergeladene Zertifikat (.crt) in Zertifikaten (ich habe es in den "persönlichen" Speicher gestellt) - klicken Sie mit der rechten Maustaste auf die .crt-Datei und klicken Sie auf Zertifikat installieren .
  • Führen Sie das Zertifikat aus certmgr.mscund exportieren Sie es (in dem Speicher, den Sie im ersten Schritt verwendet haben) als pfx-Datei mit privatem Schlüssel und erweiterten Eigenschaften (wahrscheinlich nicht erforderlich).
  • Verwenden Sie die exportierte PFX-Datei, wenn Sie Ihr Projekt signieren
  • Beispiel signtool: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    wobei das Kennwort mit dem beim Export angegebenen übereinstimmt
Noelicus
quelle
1
Danke, das hat den Trick gemacht. Ich habe die von .crtComodo bereitgestellte Datei verwendet, anstatt das Zertifikat zu installieren und die .pfxDatei dann zu exportieren .
Joshua Pinter
1
Ich danke dir sehr!
Bruno Soares
6

Ich habe das gleiche Problem, habe einige Antworten gelesen (hier gepostet) und festgestellt, dass mein Zertifikat abgelaufen ist.

Erstellen Sie einfach ein neues aus meinem Startprojekt. Dann löschte der Zertifikatsmanager das abgelaufene Zertifikat.

Jetzt kompiliert alles gut.

Juan Pablo Gomez
quelle
5

Zu den Kriterien gehören unter anderem der Kontoname (dessen privater Schlüssel ihm zugeordnet ist), die Domain, das Unternehmen, das Ablaufdatum und die beabsichtigten Zwecke.

Es gibt viele verschiedene mögliche Gründe für diesen Fehler, einige wurden bereits aufgelistet. Hier ist ein weiterer Tipp: Stellen Sie beim Importieren eines Zertifikats sicher, dass Sie mit der Originaldatei arbeiten, die Sie von der Zertifizierungsstelle erhalten haben. Andernfalls gehen möglicherweise einige Eigenschaften verloren.

Beispiel: Vor kurzem habe ich versucht, ein Zertifikat zu importieren, das von einem anderen Konto auf demselben Computer exportiert wurde. Das Zertifikat wurde für mein Konto sichtbar, war jedoch nicht mit meinem Konto verknüpft. Daher wurde signtooldie Anerkennung verweigert, ohne dass der Dateiname und ein Kennwort explizit angegeben wurden. Was, wenn es als Teil des Erstellungsprozesses ausgeführt und explizit in eine Batch- oder Quelldatei geschrieben wird, möglicherweise nicht ausreichend sicher ist. (Durch Importieren des von der CA ausgestellten Originalzertifikats wurde das Problem behoben.)

Simon Hawkin
quelle
4

Ich hatte die gleiche Nachricht " Nach dem Filter des privaten Schlüssels wurden 0 Zertifikate hinterlassen " und verbrachte zu viel Zeit meines Lebens damit, herauszufinden, was die Nachricht bedeutete.

Das Problem war, dass ich das Zertifikat falsch im Windows-Zertifikatspeicher installiert hatte, sodass dem Codesignaturzertifikat kein privater Schlüssel zugeordnet war.

Was ich hätte tun sollen, war Folgendes:

  1. Senden Sie die Anforderung entweder mit Firefox oder Internet Explorer an den Aussteller. Dadurch wird ein privater Schlüssel generiert, der vom Browser stillschweigend gespeichert wird (in Firefox wird für den Bruchteil einer Sekunde ein Dialogfeld angezeigt). Beachten Sie, dass andere Browser möglicherweise nicht funktionieren: Ihr Leben ist zu kurz, um herauszufinden, ob dies der Fall ist.

  2. Senden Sie die Anfrage, springen Sie durch die Validierungskreise und -schleifen des Emittenten, opfern Sie eine Ziege, beten Sie zu den Göttern, senden Sie eine unterschriebene Erklärung Ihrer Urgroßeltern usw.

  3. Laden Sie das Zertifikat (.crt) herunter und importieren Sie es in denselben Browser . Der Browser verfügt nun sowohl über den privaten Schlüssel als auch über das Zertifikat .

  4. Exportieren Sie das Zertifikat aus dem Browser als .p12-Datei (Personal Information Exchange). Sie werden aufgefordert, ein Kennwort zum Schutz dieser Datei anzugeben.

  5. Bewahren Sie eine Sicherungskopie der .p12-Datei auf.

  6. Führen Sie den Zertifikat-Manager (certmgr.msc) aus, klicken Sie mit der rechten Maustaste auf den Speicher für persönliche Zertifikate, wählen Sie Alle Aufgaben / Importieren ... und importieren Sie die P12-Datei in Windows. Sie werden nach dem Kennwort gefragt, mit dem Sie die Datei geschützt haben. Zu diesem Zeitpunkt können Sie den Schlüssel abhängig von Ihren Sicherheitsanforderungen als exportierbar markieren, um eine Kopie aus dem Windows Store wiederherzustellen. Sie können auch markieren, dass vor der Verwendung ein Kennwort erforderlich ist, wenn Sie Batch-Skripte auflösen möchten.

  7. Führen Sie signtool erfolgreich aus, atmen Sie erleichtert auf und überlegen Sie, wie viel Ihres Lebens Sie aufgrund schlechter Fehlermeldungen und schlechter oder fehlender Dokumentation verschwendet haben.

MZB
quelle
2

Ich habe dieses Problem auch gehabt, viel versucht. Verwendete SDK sowie Visual Studio-Signatur, aber überall wurde "Es wurden keine Zertifikate gefunden, die alle angegebenen Kriterien erfüllten".

Lösung: Beachten Sie, dass, wenn "nach dem Filter des privaten Schlüssels": '0 left' mit der Option signtool sign / debug ... angezeigt wird, die Ursache dafür ist, dass Ihr PC die Zertifizierungsstelle selbst nicht im Speicher hat. Um dies zu beheben, installieren Sie zuerst die Zertifizierungsstelle (in meinem Fall eine CRT-Datei) und führen Sie dann das Zeichen erneut aus. Es sollte jetzt funktionieren!

Signtool kann nur mit einer Zertifizierungsstelle verwendet werden, die angefordert wird und demselben PC gehört.

John Schellingerhout
quelle
Ich hatte kein Problem damit, signtool mit einer Zertifizierungsstelle zu verwenden, die von einem anderen PC stammte.
bparker
2

Mein Problem war schließlich, dass ich die Signtool-Optionen nicht verstand. Ich hatte die Option / n mit etwas versehen, das nicht zu meinem Zertifikat passte. Als ich das entfernte, hörte es auf, sich zu beschweren.

Silwing
quelle
2

Ich hatte ein ähnliches Problem, mein Computername hatte sich geändert und das Zertifikat war abgelaufen. Ich konnte dieses Problem beheben, indem ich ein neues Testzertifikat erstellte.

Klicken Sie in Visual Studio im Solution Explorer mit der rechten Maustaste auf Projekt. Eigenschaften auswählen. Wählen Sie das Fenster Anmelden in den Eigenschaften. Klicken Sie auf "Testzertifikat erstellen ....". Geben Sie die Kennwortinformationen für das Testzertifikat ein und klicken Sie auf OK.

nate_weldon
quelle
2

Wenn Sie mit / debug die Meldung "Nach dem Filter für private Schlüssel wurden 0 Zertifikate übrig." Erhalten, kann ein Grund dafür sein, dass die pfx-Datei nicht über den privaten Schlüssel verfügt. Stellen Sie beim Exportieren des installierten Zertifikats in die pfx-Datei sicher, dass das Kontrollkästchen auch den privaten Schlüssel enthält.

Prabhakaran Rajagopal
quelle
1

Gehen Sie zu project propertiesund deaktivieren Sie alle Felder, Firmbevor Sie die Kompilierung starten

ionofa
quelle