Signtool kann keine SHA256-Signierung unter Windows 7 durchführen

4227
Frank Jelstrup

Ich habe die SHA1-Signatur seit vielen Jahren verwendet, aber ab 2016 zwingt Windows Entwickler, SHA256 zu verwenden.

Windows-Erzwingung der Authenticode-Codesignatur und -stempelung

Bei der Verwendung des Windows 7 SDK-Sigtools handelt es sich bei den Funktionen zum Signieren von SHA-256 um "unbekannte Befehle". Daher ist dieses Signtool als Signtool veraltet und sollte nicht mehr verwendet werden.

Um mit SHA256 zu unterschreiben, habe ich das Windows 8.1-SDK heruntergeladen, um signtool.exe zu erhalten, das die neuen Funktionen (/ fd und andere) erhielt. Die BAT-Datei und das signtool funktionieren unter Windows 8 und 10, daher weiß ich, dass es funktioniert, stürzt jedoch unter Windows 7 ab, wenn versucht wird, die Datei mit einem Zeitstempel zu versehen.

Signing fails

Ich benutze eine bat-Datei zum Signieren von Dateien, die wie folgt aussieht (ich habe die BAT-Datei so bearbeitet, dass keine Variablen, vollständige Pfade, Firmenname und Passwörter angezeigt werden):

Path\signtool.exe sign /f "Path\Certificate.p12" /fd sha256 /p *password* /du "URL" /tr "timestampServer?td=sha256" /td sha256 /d "Product name" "Filename" 

Ich denke, ich habe nicht das richtige SDK, um einige der Funktionen zu unterstützen, aber ich kann im Internet keine Informationen finden, wie man dies unter Windows 7 einrichtet. Ich habe versucht, MS Visual C ++ 2015 Redistributable (x64) zu installieren., aber das Problem nicht gelöst.

5

3 Antworten auf die Frage

4
CodeX

In Windows 7 habe ich endlich eine Lösung für doppelt signierte Dateien gefunden.

Der Trick ist, das Windows 8 SDK ( nicht 8.1 oder 10 ) zu verwenden! Ich habe diesen Download verwendet: https://developer.microsoft.com/windows/downloads/windows-8-sdk

Vergewissern Sie sich in Windows 7 x64, dass Sie auf die x64-Binärdatei ( ...\8.0\bin\x64\signtool.exe) zeigen.

Als Bonus hier ein komfortables Batch-Skript. Speichern Sie es einfach als doublesign.bat und ziehen Sie eine Datei, die Sie signieren möchten, in diese bat-Datei.

@ECHO OFF  set signtool="C:\path to signtool\signtool.exe" set certfile="C:\path to certificate\cert.p12" set certpass="Password" set company="Optional"  echo Signing with SHA-1 %signtool% sign /f %certfile% /p %certpass% /t http://timestamp.comodoca.com/authenticode %1 timeout /T 3 echo. & echo Signing with SHA-256 %signtool% sign /f %certfile% /p %certpass% /as /fd sha256 /tr http://timestamp.comodoca.com/rfc3161 /td sha256 %1  @PAUSE 
Ich habe das nicht getestet, als ich vor nicht allzu langer Zeit auf Windows 10 umgestiegen bin. Aber Ihre Antwort ist im Moment die beste, also habe ich diese als richtige Antwort markiert. Frank Jelstrup vor 7 Jahren 0
1
Daniel Georgiev

Das Problem ist eigentlich viel einfacher.

Das Problem liegt beim Zeitstempelserver.

Anstelle der Verwendung von signtool.exe mit diesem

/t http://timestamp.comodoca.com 

Sie müssen es so für SHA1 verwenden

/tr http://timestamp.comodoca.com /td sha1 

Und für SHA256

/tr http://timestamp.comodoca.com/?td=sha256 /td sha256 
Ihre Befehle führen immer noch dazu, dass Signtool für mich abstürzt. Ich nehme an, Sie verwenden das Signtool aus dem Windows 8 SDK Cocowalla vor 6 Jahren 0
0
Frank Jelstrup

Anscheinend kann ich nicht gut lesen, auch beantworte ich meine eigene Frage, da andere es schwer finden könnten, genau wie ich.

Windows unterstützt die signtool.exe nicht mehr unter Windows 7, daher funktionieren alte / veraltete Funktionen wie die SHA-1-Signatur noch, aber der Zeitstempel von SHA-256 ist ein Problem. Ich habe dies auf MSDN gefunden:

Zitat aus MSDN: Hinweis Sie können SignTool nur zum Signieren Ihrer Windows Store-App-Pakete unter Windows 8 oder höher oder Windows Server 2012 und höher verwenden. Sie können SignTool nicht zum Signieren von App-Paketen auf untergeordneten Betriebssystemen wie Windows 7 oder Windows Server 2008 R2 verwenden.

Wenn Sie das Ganze lesen wollen, dann schauen Sie hier:

So signieren Sie ein App-Paket mit SignTool

Hier geht es jedoch nur um Appx-Pakete. Es gibt lediglich an, dass Sie keine Appx-Pakete unter Windows-Versionen vor 8 signieren können. Daniel B vor 8 Jahren 0
Richtig, aber wenn Sie sich die Funktionsweise des Signierens anschauen, fügt das Signieren nur eine Überlagerung am Ende einer Datei hinzu. Diese Überlagerung enthält verschiedene Parameter für die Datei. Wenn also die Datei geändert wird, ist die Signatur beschädigt und sollte nicht mehr vertrauenswürdig sein. Es ist wie eine fortgeschrittene CRC-Prüfsumme. Das Signieren von appx-Paketen / -Dateien oder anderen Dateien ist technisch identisch, genau wie bei der Erstellung einer CRC-Prüfsumme für alle Arten von Dateien. Ich glaube immer noch, dass meine Antwort gültig ist, bis sie sich davon überzeugt hat. Frank Jelstrup vor 8 Jahren 0
Unterschiedliche Dateitypen sind unterschiedlich signiert. Aber darum geht es nicht: Im Artikel auf MSDN geht es einfach nicht um `.exe'-Dateien. Es gilt * nur für appx-Pakete. * Sie haben versucht, ein Windows 8-Tool unter Windows 7 zu verwenden. Das hat nicht funktioniert. Dies bedeutet jedoch nicht, dass Sie die Windows 7 SDK-Version von SignTool nicht verwenden können, um mit dem Signieren von ".exe" -Dateien fortzufahren. Daniel B vor 8 Jahren 0
Das Windows 7-Tool verfügt nicht über die erforderlichen Optionen, um SHA-256-Signaturen und Zeitstempel zu erstellen. Das bedeutet, dass das Windows 7-SDK-Signal nicht verwendet werden sollte (fügt dies der Frage hinzu, gute Info). Ich weiß, dass MSDN App-Pakete schreibt, aber ich persönlich gehe davon aus, dass es alle Dateien sind und dass sie appx als Beispiel für eine Datei verwenden. Diese Annahme wird gemacht, wenn ich mit signtool alle Arten von Dateien signiere, sogar Dateiformate, die ich selbst erstellt habe. Fühlen Sie sich frei, um eine bessere Antwort zu finden, dann gebe ich Ihnen die richtige Antwort :) Frank Jelstrup vor 8 Jahren 0