Codesigning neu

Vorherige Änderungen

Zuerst hat es geheißen, man muß unbedingt SHA256 als Hash nehmen, sonst wird alles unsicher und Windows mag einen nicht mehr. Die Änderung dazu war relativ einfach: Ein neues Zertifikat mußte her und man hat beim Codesigning gesagt, daß man eben SHA256 verwenden will. Soweit so simpel. Ohne lange Diskussion hat sich Microsoft aber eines anderen besonnen und verlangt quasi von jetzt auf gleich double-signing (weil z.B. ihre eigenen Serverprodukte wie 2008 kein SHA256 können und sie das auch nicht nachrüsten wollen). Der Weg zu double-signing ist aber deutlich länger und sei hier beschrieben.

Double-Signing

Das Prinzip ist sehr simpel. Man ruft das signtool 2x auf und sagt beim zweiten Aufruf, man will die Signatur nicht ersetzen, sondern dazutun. Dazu braucht es aber auch eine Tool-Chain, die weiß wie man damit umgeht. Der Inno-Installer kann ab 5.5.8 damit umgehen. Hier darf man ab dieser Version einfach zwei signtool poarameter angeben. Sieht also z.B. so aus:
SignTool=signname_1 {#ThisName} {#ThisVer} ({#InstallVer})
SignTool=signname_2 {#ThisName} {#ThisVer} ({#InstallVer})
Natürlich muß man dazu auch zwei Einträge in der Sign-Einstellung haben. Bei _1 als sha1 und bei _2 als sha256 mit der Anhängeoption. Das signtool selbst muß zumindest aus dem Windows SDK8.1 stammen. Es ist jetzt nicht nur mehr eine exe, sondern besteht aus
signtool.exe
wintrust.dll
mssign32.dll

Microsoft.Windows.Build.Signing.wintrust.dll.manifest
signtool.exe.manifest
Microsoft.Windows.Build.Signing.mssign32.dll.manifest
Alle diese Dateien müssen im gleichen Verzeichnis stehen. Das ganze für die kleine Option /as zum Anhängen der zweiten Signatur. Wenn man nun das ganze ausprobieren will, stößt man auf eine sehr seltsame Meldung von wegen Problemen bei der Ausführung und falschen Parametern. Man sucht lange im Internet und wird auch nicht fündig. Ich konnte das Problem jedenfalls durch trial and error auf die Zeitstampserver zurückführen. Offenbar ist es bei der Verwendung von /as unbedingt notwendig einen neuen RFC3161 Timestampserver zu nehmen. Für die sha1 Signatur wird empfohlen einen alten Timestampserver zu nehmen, weil sonst wieder Probleme mit alten Systemen auftreten. Da verisign dazu eher schweigsam ist, habe ich alles auf Comodo Timestampserver geändert. Der korrekte Doppelaufruf vom neuen signtool lautet daher mit unseren Daten:
signtool.exe sign /fd SHA1 /a /n Wien /t http://timestamp.comodoca.com/authenticode %1
signtool.exe sign /as /fd SHA256 /a /n Wien /td sha256 /tr http://timestamp.comodoca.com/rfc3161 %1

Die daraus entwickelten zwei Einträge für den Inno-Installer lauten daher (wenn der Pfad zu signtool.exe stimmt):
signname_1=“c:Program Files (x86)toolssigntool.exe“ sign /fd SHA1 /d „$p“ /a /n Wien /t http://timestamp.comodoca.com/authenticode $f
signname_2=“c:Program Files (x86)toolssigntool.exe“ sign /as /fd SHA256 /d „$p“ /a /n Wien /td sha256 /tr
http://timestamp.comodoca.com/rfc3161 $f

Resourcen

Damit nicht jeder den SDK runterladen und installieren muß, findet sich das package auf dem goodie ihres Vertrauens unter ProgrammierenCodesigning.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert