Der folgende Beitrag zeigt, wie man Windows Apps mit einem 100% vertrauenswürdigen SSL-Zertifikat relativ kostengünstig mittels SignTool code-signieren kann. Ein absolutes Muss für jeden Entwickler, da die Restriktionen von Windows Defender seit Windows 10 erheblich verstärkt wurden.
- 1 Woher bekomme ich ein günstiges SSL-Zertifikat um meine App zu signieren?
- 2 Das SSL Code-Zertifikat aus Firefox exportieren
- 3 Installation des Zertifikats über Internet Explorer 11
- 4 SignTool unter Windows installieren
- 5 SignTool Error: ImportCertObject() failed
- 6 Windows Apps mit SignTool signieren
- 7 SignTool in Inno Setup integrieren
- 8 Wo finde ich das Windows SignTool in neueren Windows 10 SDKs?
- 9 Das Windows SignTool unter Windows 11
Woher bekomme ich ein günstiges SSL-Zertifikat um meine App zu signieren?
Die Antwort lautet bei Comodo, oder besser gesagt bei einem Premium Reseller von Comodo, z.B Leader Telecom B.V.
Die Vorteile:
- Comodo SSL-Zertifikate sind sog. Root-Zertifikate, d.h. Windows kennt bei Auslieferung bereits Comodo als vertrauenswürdige Zertifizierungs-Instanz.
- Der Preis ist bereits rabattiert und wird zeitnah an Dollarschwankungen angepasst.
Zum Zeitpunkt dieses Blog-Beitrags beträgt der Preis lediglich 63 EUR im Jahr. - Man kann das SSL-Zertifikat 14 Tage lang unverbindlich testen und erst dann bezahlen.
- Die Verifizierung erfolgt unkompliziert anhand der Ust-IdentNr und einem automatischen Rückruf auf die angegebene Telefonnummer.
- Über ein Portal können alle SSL-Zertifikate jederzeit selbst gemanaged werden.
Der komplette SSL Zertifikats-Prozess wird durch Leader Telecom vorbildlich und schnell abgewickelt.
Wichtig:
Zum Kauf benötigt man Internet Explorer 11 unter Windows oder Mozilla Firefox <= Version 68 auf anderen Plattformen, da nur diese beiden Browser SSL-Certificate Sign Requests generieren. Das Windows Code-Zertifkat kann auch auf einem Mac oder Linux PC geordert werden. Der Sign-Request und Download des Zertifikats erfolgen hier ebenfalls voll automatisch.
Das SSL Code-Zertifikat aus Firefox exportieren
In unserem Beispiel haben wir den Kauf des SSL-Zertifikats mit Firefox durchgeführt. Als Nächstes muss das SSL Code-Zertifikat zur Verwendung unter Windows aus dem Zertifikats-Store des Browsers exportiert werden:
- Hierzu wählen wir in den Einstellungen von Firefox “Datenschutz und Sicherheit” aus, scrollen ganz nach unten und klicken auf “Zertifikate anzeigen”.
- Danach sichern wir das SSL Codesign Zertifikat als PKCS12-Datei.
- Vor dem Speichern muss noch ein Passwort zur Absicherung des SSL Zertifikats festgelegt werden.
- Die exportierte Datei hat die Endung .p12 und enthält sowohl den Public- als auch den Private Key.
Installation des Zertifikats über Internet Explorer 11
Wenn man zum Kauf den Internet Explorer 11 benutzt, landet das Zertifikat automatisch im Zertifikatsspeicher von Windows und kann von dort aus exportiert werden. Diesen findet man unter Systemeinstellungen / Internetoptionen:
Bei Export sind die folgenden Optionen zu beachten:
Sollte es bei der Weiterverwendung des exportieren Zertifikats Probleme geben, dann sollte es mit Hilfe des DigiCert Utility (siehe unten) sauber neu exportiert werden.
SignTool unter Windows installieren
Als Nächstes benötigen wir signtool.exe auf unserem Windows PC. Die App ist Bestandteil des Windows SDK. Hier muss darauf geachtet werden, dass das SDK zur aktuellen Windows-Version passt. Das Windows 10 SDK gibt es z.B. hier: Windows 10 SDK downloaden.
Nach der Installation findet Ihr das SignTool hier:
1 |
c:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe |
Es macht Sinn, den Pfad in den Suchpfad für System-Kommandos einzubauen:
SignTool Error: ImportCertObject() failed
Will man nun voller Vorfreude seine erste App signieren (dazu gleich mehr), stolpert man leider über diesen Fehler:
1 2 |
SignTool Error: An unexpected internal error has occurred. Error information: "Error: Store::ImportCertObject() failed." (-2146885630/0x80092002) |
Hierbei handelt es sich um einen Bug von Firefox. Das exportierte SSL Code-Zertifikat ist zwar intakt, ein internes Feld jedoch zu lang, was zu einem Abbruch von SignTool führt. Es spielt dabei keine Rolle, ob man Firefox unter Windows oder einer anderen Plattform verwendet hat.
Der Fehler lässt sich glücklicherweise mit dem DigiCert Utility beheben:
- Wir importieren die .p12-Datei in DigiCert …
- und exportieren das SSL Code-Zertifikat als PFX-Datei.
- Wichtig: Der private Key muss mit exportiert werden.
Hierzu ist das Häkchen bei “Include all certificates in the certification path” zu setzen.
Windows Apps mit SignTool signieren
Im folgenden Szenario heisst unser mittels DigiCertUtil exportiertes SSL Code-Zertifilat “Comodo_current.pfx”, unser beim Exportieren eingegebenes Passwort heisst “PASSWORD” und unsere zu signierende App heisst “test.exe”.
Zum Code-Signieren rufen wir das SignTool wie folgt auf:
1 |
signtool sign /f Comodo_current.pfx /tr http://timestamp.digicert.com /td sha256 /fd sha256 /p PASSWORD /v test.exe |
Die Kommandozeilen-Parameter haben folgende Bedeutung:
- sign: Das Kommando zum Signieren
- /f: Gibt das SSL CodeSign-Zertifikat an, hier Comodo_current.pfx
- /fd: Erzwingt die Verwendung von SHA256 Hashes für das Zertifikat.
- /tr: Gibt die URL des RFC 3161-Zeitstempelservers an.
Der Zeitstempel ist wichtig, damit die App auch nach Ablauf des SSL Code-Zertifikats weiter benutzt werden kann. - /td: Fordert eine SHA256 Prüfsumme für den Zeitstempel an.
- /p: Gibt das Zertifikats-Passwort an.
- /v: Sorgt dafür, dass ausführliche Meldungen ausgeben werden.
Eine ausführliche Liste aller Parameter findet Ihr hier: Command Line Options von SignTool
Will man alle *.exe-Dateien in einem Ordner mit nur einem Befehl signieren, erreicht man das wie folgt:
1 |
signtool sign /f Comodo_current.pfx /tr http://timestamp.digicert.com /td sha256 /fd sha256 /p PASSWORD /v *.exe |
SignTool in Inno Setup integrieren
Wer seine Installer mit InnoSetup baut, kann sich über die SignTool-Integration freuen: Inno Setup generiert damit automatisch einen bereits fertig signierten Installer. Zur Integration von SignTool in Inno Setup geht man im Inno Setup Studio wie folgt vor:
- Unter Tools den Menüpunkt “Configure Sign Tools” auswählen
- Im folgenden Dialog den kompletten Pfad zu SignTool inklusive aller Parameter hinzufügen.
- Als Name wählen wir “signtool”
- Anstelle der zu signierenden Datei wird $f eingetragen.
Beispiel:
1 |
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64\signtool sign /f W:\DATA\Developer-Certs\Microsoft\Comodo_current.pfx /tr http://timestamp.digicert.com /td sha256 /fd sha256 /p PASSWORD /v $f |
Unser Inno Setup Script ergänzen wir dann noch in der SETUP SECTION mit der Zeile:
1 |
SignTool=signtool |
Und das war’s auch schon. Viel Spass beim Signieren!
[Edit 2020-01-03]
Wo finde ich das Windows SignTool in neueren Windows 10 SDKs?
In neueren Windows 10 SDKs hat sich der Pfad bzw. sogar die Installations-Prozedur für das Windows SignTool geändert:
Um das Windows SignTool zu installieren muss wie folgt vorgegangen werden (Beispiel anhand dem Windows 10 1903 SDK):
- Unter dem eingangs erwähnten Download-Link, hat man nun die Wahl zwischen einem Installer und einer ISO-Datei. Hier die ISO-Datei auswählen.
- Nach Download die ISO-Datei per Doppelklick öffnen und im Ordner “Installers” das Paket “Windows SDK Signing Tools-x86_en-us.msi” ausführen. Wichtig: Der Installer öffnen kein Fenster, aber die Installation klappt trotzdem.
Nach Installation ist der Pad zum Windows SignTool:
1 |
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86 |
bzw.
1 |
C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\signtool.exe |
[Edit 2021-11-09]
Das Windows SignTool unter Windows 11
Das Windows 11 SDK gibt es hier, Download vorzugsweise als ISO-Datei. Nach Start des Installers lässt sich das SignTool komfortabel auswählen. Alle anderen Optionen können ausgeschaltet werden.
Hat man das SignTool vorher schon mal verwendet, sollten alle Aufrufe durch die Parameter /tr, /td und /fd ergänzt werden:
1 |
signtool sign /f Comodo_current.pfx /tr http://timestamp.digicert.com /td sha256 /fd sha256 /p PASSWORD /v test.exe |
Im Text sprichst du wahrscheinlich von einem günstigen OV-Zertifikat. Reicht das aus? Oder braucht man nicht lieber ein EV-Zertifikat? Hast du Erfahrungen, inwieweit EV besser ist als OV?
Korrekt. Der einzige Vorteil eines EV-Zertifikats ist, daß die SmartScreen-Meldung unterbleibt. Bei >3000 Downloads oder einer entsprechenden Reputation der Domain funktioniert das aber auch mit diesem Zertifikat.
Auch wenn dieser Blogbeitrag schon etwas älter zu sein scheint, so hat er mir die letzten Tage sehr gute Dienste geleistet. Microsoft macht ja jetzt – zumindest unter Windows 11 -Ernst mit der Smart App Control Prüfung, sodass man um eine Code Signierung wohl nicht mehr umhinkommt. Bisher musste ich mich darum nicht kümmern, das haben immer andere gemacht, aber jetzt musste ich das bei meinem Privatprojekt selbst in Angriff nehmen und ich bin wirklich froh, auf diesen informativen Beitrag gestoßen zu sein.
Hat alles geklappt, dafür ein großes Dankeschön!
Gerne! Schon etwas älter, aber immer noch aktuell … :-)
Mit Windows 11 Version 22H2 wahrscheinlich aktueller denn je :-)
Hat aber alles geklappt, mal sehen, wie sich das jetzt in der Praxis bemerkbar machen wird. Wenn sich die Supportanfragen bzgl. Installationsproblemen wieder auf ein normales Niveau einpendeln sollten, dann hätte sich die Investition gelohnt.
Wie gesagt, nochmal vielen Dank, konnte alles in einem Rutsch erledigen, auch die Einbindung in Inno Setup. Das Zusammensuchen der Infos ist ja immer der unschöne Part beim Programmieren, schön, wenn man die Infos gebündelt vorfindet und dann gleich loslegen kann.
Großartig, tausend Dank für die schnelle Antwort und Hilfe!
Gerne :-)
Hallo
und herzlichen Dank für dieses ausführliche und profunde Tutorial! An der Stelle muss ich mich nur als Neuling und Mac-User outen: Kann es sein, dass sich das SignTool inzwischen an einer anderen Stelle im System befindet? An der Position “/ClickOnce” bin ich jedenfalls schlagartig aus der Anleitung herausgeflogen und ich scheitere bereits an dem Schritt mit dem Suchpfad und den 300 Teilfenstern ;-)
Bei mir finde ich jedoch unter Programme (x86)/Windows Kits/10/bin/ vier SignTools (die ich jedoch bei den Suchpfaden nicht einbeziehen kann)?
Beste Grüße
Jan
Hallo Jan,
danke für den Hinweis. Die Prozedur hat sich in neueren SDKs geändert. Ich habe den Beitrag entsprechend erweitert. Siehe ganz unten:
“Wo finde ich das Windows SignTool in neueren Windows 10 SDKs?”
— Harald