it-swarm.com.de

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

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

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

Und davon bekomme ich:

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

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

231
Earlz

Beim Abrufen dieses Fehlers durch Visual Studio war dies darauf zurückzuführen, dass ein Signaturzertifikat eingerichtet wurde, das dem Computer entspricht, auf dem es ursprünglich entwickelt wurde.

Sie können dies überprüfen, indem Sie auf der Registerkarte Projekteigenschaften> Signieren die Zertifikatsdetails überprüfen.

Sie können die Option "SignOnce-Manifeste signieren" deaktivieren, um die Signatur zu deaktivieren.

Signing Properties

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

506
JDandChips

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

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

Es hilft Ihnen, herauszufinden, was los ist. Sie sollten die Ausgabe so 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, durch welchen Filter Ihr Zertifikat nicht funktioniert oder ob keine Zertifikate berücksichtigt wurden. 

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


1 Bitte beachten Sie: signtool legt fest, wo die /debug-Option platziert wird. Es muss nach der sign-Anweisung gehen.  
2 Beachten Sie auch: Die /debug-Option funktioniert nur mit einigen Versionen von signtool. Die WDK-Version hat die Option, die Windows SDK-Version jedoch nicht.

84
Daniel

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

30
whizkid

deaktivieren Sie auf der Registerkarte "Signieren" in den Projekteigenschaften das Kontrollkästchen "Einmal klicken, sobald ein Klick erfolgt". Der Fehler wird entfernt und Sie können dort einen neuen erstellen.

15
Sourav Sharma

Bekam das gleiche Problem, stellte sich heraus, dass der private Schlüssel für das Zertifikat keine Berechtigung hatte. 
Zum Beheben - Öffnen Sie die Zertifikatsverwaltung, suchen Sie Ihr Zertifikat, klicken Sie mit der rechten Maustaste -> Private Schlüssel verwalten, und stellen Sie dann sicher, dass Ihr Benutzer hinzugefügt wird und Berechtigungen erhalten haben, die das Problem behoben haben.

14
user3740240

Falls jemand anderes auf dieses Problem stößt: Mein Problem war, dass ich vor der Verwendung der signtool.exe-App den Befehl Aufforderung als Administrator ausführen musste. Dann funktioniert alles wunderbar.

12
Dave

In meinem Fall habe ich die falsche Art von Zertifikat, das ich zu verbinden versuche.
Ich hatte "Server Authentication" und nicht "Code signing" .
Sie sollten dies unter Zertifikat-Fang im Abschnitt "beabsichtigte Zwecke" anzeigen können.
Danach funktioniert es einfach gut.

11
maridob

Ich hatte dieses Problem und ich bin mir nicht ganz sicher, durch welchen Schritt es funktioniert hat, aber ich hoffe, das hilft jemandem anderen. Dies ist, was ich getan habe:

  • Installieren Sie das heruntergeladene Zertifikat (.crt) in Zertifikaten (ich lege es in den "persönlichen" Store). Klicken Sie mit der rechten Maustaste auf die .crt-Datei und klicken Sie auf Install Certificate .
  • Führen Sie certmgr.msc und export das Zertifikat (gefunden in dem von Ihnen verwendeten Speicher im ersten Schritt) als pfx-Datei aus, einschließlich des privaten Schlüssels und der erweiterten Eigenschaften (wahrscheinlich nicht erforderlich).
  • Verwenden Sie die exportierte PFX-Datei, wenn Sie Ihr Projekt signieren
  • Beispiel Signalwerkzeug: signtool sign /f "c:\mycert.pfx" /p mypassword /d "description" /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetPath)
    Dabei ist das Kennwort dasselbe wie beim Export
6
noelicus

Ich habe dieses Problem gelöst, indem ich das Flag /sm verwendet habe, um anzugeben, dass im Maschinenspeicher anstelle des Standardwerts "Mein (lokaler Benutzer)" -Speicher gesucht werden soll. Außerdem kann es hilfreich sein, das Debugging für Signtool mithilfe von /debug zu aktivieren.

6
jle

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

Erstellen Sie einfach eine neue aus meinem Startprojekt. Dann bei Zertifikatsmanager das abgelaufene Zertifikat gelöscht.

Jetzt alles gut kompiliert.

5

Zu den Kriterien gehören unter anderem der Kontoname (mit dessen privatem Schlüssel er verbunden ist), die Domäne, das Unternehmen, das Ablaufdatum und die beabsichtigten Zwecke. 

Es gibt viele mögliche Gründe für diesen Fehler. Einige wurden bereits aufgelistet. Hier ein weiterer Tipp: Stellen Sie beim Importieren eines Zertifikats sicher, dass Sie mit der original-Datei arbeiten, die von der Zertifizierungsstelle (CA) erhalten wurde. 

Beispiel: Ich habe vor kurzem 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, und signtool lehnte es ab, es zu erkennen, ohne explizit den Dateinamen und ein Kennwort anzugeben. Wenn dies als Teil des Erstellungsprozesses ausgeführt und explizit in eine Batchdatei oder Quelldatei geschrieben wird, ist dies möglicherweise nicht ausreichend sicher. (Beim Importieren des ursprünglichen von der Zertifizierungsstelle ausgestellten Zertifikats wurde das Problem behoben.)

5
Simon Hawkin

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

2
Silwing

Ich habe diese Ausgabe auch gehabt, viel versucht. Verwendetes SDK sowie Visual Studio-Signierung, aber überall, wo ich bekam, wurden "keine Zertifikate gefunden, die alle angegebenen Kriterien erfüllten".

Lösung: Wenn "after private key filter": "0 left" mit der Option signtool sign/debug ... angezeigt wird, ist die Ursache, dass Ihr PC die CA selbst nicht im Speicher hat. Um dieses Problem zu lösen, 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 vom selben PC angefordert wird. 

Ich hatte ein ähnliches Problem, dass sich mein Computername geändert hatte und das Zertifikat abgelaufen war. Ich konnte dieses Problem durch Erstellen eines neuen Testzertifikats beheben. 

Klicken Sie in Visual Studio mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer. Eigenschaften auswählen. Wählen Sie im Eigenschaftenfenster Signieren aus. Klicken Sie auf "Testzertifikat erstellen ...". Geben Sie die Kennwortinformationen für das Testzertifikat ein und klicken Sie auf OK. 

2
nate_weldon

Wenn Sie mit/debug die Meldung erhalten, dass nach dem Filter des privaten Schlüssels noch 0 Zertifikate vorhanden sind, kann dies daran liegen, dass die pfx-Datei nicht über den privaten Schlüssel verfügt. Wenn Sie das installierte Zertifikat in die pfx-Datei exportieren Stellen Sie sicher, dass das Kontrollkästchen aktiviert ist, um auch den privaten Schlüssel aufzunehmen.

Gehen Sie zu project properties und deaktivieren Sie alle Felder in der Firm, bevor Sie die Kompilierung starten

1
ionsofa

Ich hatte die gleiche "After Private Key-Filter, 0 Zertifikate waren übrig" -Meldung 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 PRIVATE KEY generiert, der vom Browser stumm gespeichert wird (in Firefox wird für einen Bruchteil einer Sekunde ein Dialogfeld angezeigt). Beachten Sie, dass andere Browser möglicherweise nicht funktionieren: Ihr Leben ist zu kurz, um herauszufinden, ob sie funktionieren.

  2. Senden Sie die Anfrage, springen Sie durch die Validierungsringe und -schleifen des Emittenten, opfern Sie eine Ziege, beten Sie zu den Göttern, reichen Sie eine unterschriebene Erklärung von Ihren Urgroßeltern ein usw. 

  3. Laden Sie das Zertifikat (.crt) herunter und importieren Sie es in den gleichen Browser . Der Browser verfügt jetzt über den privaten Schlüssel und das Zertifikat.

  4. Exportieren Sie das Zertifikat als .p12-Datei (Personal Information Exchange) aus dem Browser. Sie werden aufgefordert, ein Kennwort einzugeben, um diese Datei zu schützen. 

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

  6. Führen Sie den Certificate Manager (certmgr.msc) aus, klicken Sie mit der rechten Maustaste auf den Zertifikatsspeicher Personal, wählen Sie All Tasks/Import ... aus und importieren Sie die P12-Datei in Windows. Sie werden nach dem Kennwort gefragt, das Sie zum Schutz der Datei verwendet haben. An diesem Punkt 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 festlegen, dass vor der Verwendung ein Kennwort erforderlich ist, wenn Sie Batch-Skripts brechen 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.

0
MZB

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 als dieser MS-Artikel schlägt vor,

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

0
nPcomp