STATUS_NOT_FOUND als "Ein unerwarteter interner Fehler" in signtool.exe

8

Meine Frage bezieht sich auf diese . Leider handelt es sich bei dieser Frage um eine andere Zertifizierungsstelle (Symantec), die ein anderes Hardware-Token (von Safenet) verwendet. Die dort bereitgestellten Lösungen stimmen zwar mit dem Fehlercode überein, die Umstände meines Falls jedoch nicht (unter anderem die Smartcard) Mir wurde zur Verfügung gestellt, scheint keinen eigenen Anbieter unter zu registrieren HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers).

Ich verwende ein Open Source-Codesignaturzertifikat von certum.pl. Ich verwende das signtool.exeaus dem Windows SDK 10.0.18362.0und sehe den folgenden Fehler (mit signtool sign /v /debug):

signtool.exe sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /fd sha256 /tr "http://timestamp.digicert.com" /td sha256 "mysoftware.exe"
The following certificates were considered:
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
After EKU filter, 2 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-1073741275/0xc0000225)
SignTool Error: An unexpected internal error has occurred.

Der Fehlercode entspricht 0xC0000225genau dem folgenden NTSTATUS:

//
// MessageId: STATUS_NOT_FOUND
//
// MessageText:
//
// The object was not found.
//
#define STATUS_NOT_FOUND                 ((NTSTATUS)0xC0000225L)

... was angesichts HRESULTder von signtool.exeund der zugrunde liegenden Infrastruktur 1: 1 zugewiesenen Codes durchaus Sinn macht NTSTATUS(natürlich, wenn ein Einrichtungscode angegeben wird, HRESULTexistieren Codes, die keinen Namen haben in ntstatus.h... was ich meine, ist das Layout von HRESULTund NTSTATUS).

Leider sagt mir das nichts, da viele Dinge zu einem bestimmten Zeitpunkt möglicherweise nicht gefunden werden ... Zum jetzigen Zeitpunkt versuche ich immer noch, sie mit ProcMon selbst einzugrenzen. Für den fehlgeschlagenen Versuch werden NAME NOT FOUNDin ProcMon 592 Ergebnisse angezeigt, die dem obigen NTSTATUSCode entsprechen sollten . Die meisten davon für Registrierungsschlüssel und -werte.


Hier ist wieder die vollständige signtoolBefehlszeile:

"C: \ Programme (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https: //my.url " / d "Kurzbeschreibung" / fd sha256 / tr " http://timestamp.digicert.com " / td sha256 "mysoftware.exe"

... und ja, ich habe überprüft, ob es das wirklich nutzt signtool.exe... tatsächlich habe ich es mit x86 und x64 mit vollständigen Pfaden versucht (mein eigentliches Skript umschließt einige der Komplexitäten und bereitet die Umgebung auf die Anpassung vor PATH, um anrufen zu können signtool.exeohne seinen vollen Weg).

Seltsamerweise funktioniert es beim Signieren mit SHA1-Digests wie folgt:

"C: \ Programme (x86) \ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https: //my.url " / d "Kurzbeschreibung" / t " http://timestamp.digicert.com " "mysoftware.exe"

(Unterschiede sind die fehlende /fd sha256und /td sha256sowie /tanstelle /trder Zeitstempel-Service-URL, dh anderes Protokoll)

Die Version der proCertum CardManager-Software ist 3.2.0.156, Details wie im folgenden Screenshot dargestellt:

proCertum CardManager Software Version 3.2.0.156

(Es ist die neueste Version, die zum Zeitpunkt des Schreibens auf der Certum-Website verfügbar ist.)


Ich habe mittlerweile auch mit dem signtool.exe(x86 bzw. 64) versucht von:

  • Windows 8.1 SDK
  • Windows 10.0.17763.0 SDK

... die gleichen Ergebnisse und ich bin verwirrt, wie ich das lösen kann.

0xC0000022L
quelle
@ HansPassant: Ja, das ist die Frage, die ich verlinkt habe. Siehe den ersten Absatz meiner Frage. Wenn der Fehler im SafeNet-Installationsprogramm eine Registrierung eines Kryptografieanbieters (oder vielmehr die Schreibweise) betraf, schließt die Tatsache, dass Certum keinen eigenen Anbieter registriert, aus, dass dies hier gilt. Oder was fehlt mir?
0xC0000022L
@ HansPassant Die Parallele stellte sich heraus, dass in beiden Fällen EV-Zertifikate erwähnt wurden. Auch wenn in meinem Fall das Zertifikat eigentlich kein EV ist.
0xC0000022L

Antworten:

3

Es stellte sich heraus, dass das Problem eine Option war, die standardmäßig nicht richtig eingestellt war (der Name deutete darauf hin, dass sie nur für EV-Zertifikate gilt, aber anscheinend auch für solche mit SHA2-Digests). Vielen Dank an die Certum-Support-Leute!

Dialogfeld "ProCertum CardManager-Optionen"

Ich habe die entsprechende Option hervorgehoben.

Beachten Sie auch, dass ich musste

  1. Beenden Sie die Anwendung (von TNA aka "System Tray")
  2. starten Sie die Anwendung erhöht , von seinem Programmordner
  3. Aktivieren Sie das Kontrollkästchen
  4. Drücken Sie die OK-Taste
  5. Schließen Sie das Meldungsfeld (Erfolg)
  6. Neustart

... als ich es zuvor ohne Erhebung versucht hatte, schlug der Prozess fehl. Und ja, ich habe das "Schild" -Symbol gesehen, aber ich hatte angenommen, dass die Anwendung die Logik zum Ausführen der Erhebung enthält (nicht).

Als ich nach einem Neustart erneut versuchte, zu signieren, forderte nicht mehr der proCertum CardManager die PIN der Karte an, sondern Windows. Und das Signieren wirkte wie ein Zauber.

NB:HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers Nach diesen Schritten waren noch keine Einträge darunter .

0xC0000022L
quelle