Wie man Anwendungen auf Windows signiert (SDK)
Lassen Sie uns gemeinsam anschauen, wie man eine Anwendung auf Windows mit Windows SDK (SignTool - Befehlszeilentool) und einem Code Signing Zertifikat signiert. Die Anleitung geht von einem vorbereiteten Code Signing Zertifikat im PFX und einer installierten Windows SDK Entwicklungsumgebung auf dem Windows Betriebssystem aus. Laden Sie das SDK von der Microsoft Website für die entsprechende Version Ihres Windows herunter, zum Beispiel Windows Software Development Kit (SDK) für Windows 10.
Verwendung von Signtool
Die Signtool.exe ist ein Programm, das Anwendungen mit einem Code Signing Zertifikat signiert. Nach der Installation von Windows SDK verwenden Sie es über die Befehlszeile. Um Anwendungen zu signieren, müssen Sie die grundlegenden Parameter kennen, um die Anwendung mit dem richtigen Zertifikat und den richtigen Einstellungen korrekt signieren zu können.
Das Signieren erfolgt tatsächlich über die Befehlszeile und das Zertifikat muss auf dem jeweiligen Computer verfügbar sein (es wird nirgendwo installiert).
Die grundlegenden Parameter (Befehle) für das Signieren sind folgende:
signtool Befehl /Parameter
Von den Befehlen verwenden Sie Sign zum Signieren und Verify zur Überprüfung der Dateisignatur. Timestamp ist der Befehl, um einen Zeitstempel hinzuzufügen, aber das können Sie direkt beim Signieren der Datei tun.
Nützliche Parameter:
- /f SignCertFile – Verwenden Sie eine PFX-Datei für das Signieren, verweist dieser Befehl auf deren Speicherort. Es ist nicht mehr möglich, ein Code Signing-Zertifikat im PFX-Format zu erhalten.
- /s StoreName – Verwenden Sie einen Zertifikatspeicher (z.B. auf einem Token), gibt es an, welcher verwendet werden soll. Der Standard ist My.
- /t URL – fügt einen Zeitstempel hinzu und verweist darauf. Die URLs der Zeitstempel-Server finden Sie unten.
- /td - Fingerabdruck-Algorithmus (digest) im Zeitstempel. Wählen Sie mindestens den Parameter sha256 oder höher.
- /fd - Fingerabdruck-Algorithmus (digest). Wählen Sie mindestens den Parameter sha256 oder höher.
Die vollständige Dokumentation finden Sie auf der Microsoft-Website oder durch Eingabe des Befehls „signtool sign /?“.
Der gesamte Befehl zum Signieren einer Datei könnte dann folgendermaßen aussehen:
SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Verwenden Sie immer einen Zeitstempel, da er der signierten Anwendung Zuverlässigkeit auch nach dem Ablauf des Zertifikats sichert, das für das Signieren verwendet wurde. Das ist sehr wichtig, da Sie nicht erneut ältere Anwendungen rückwirkend signieren müssen (typischerweise nach zwei Jahren Ablauf des Code Signing-Zertifikats), damit sie nicht als unsicher angesehen werden. Wenn Sie zum Zeitpunkt des Signierens einen Zeitstempel verwenden und das Zertifikat gültig ist, wird auch die Anwendung in Zukunft gültig sein.
Es gibt mehrere Zeitstempel-Server; ich empfehle den Zeitstempel-Server von DigiCert: http://timestamp.digicert.com/
Dieser Server hat keine Webseite auf Port 80, also ist es sinnlos, ihn mit einem Browser zu besuchen (Sie werden nichts sehen).
Zertifikatspeicher
Ein Zertifikat kann an mehreren Orten (in mehreren Speichern) gespeichert und auf verschiedene Weise aufgerufen werden. Früher war es möglich, das Zertifikat als PFX-Datei zu speichern, aber das ist nicht mehr möglich. Eine PFX-Datei kann von jedem gestohlen werden, und obwohl PFX passwortgeschützt ist, stellt es ein großes Sicherheitsrisiko dar (Passwörter sind zudem oft sehr schwach). PFX eignet sich besonders für Backups von S/MIME-Zertifikaten oder für das Web.
Ein gängiger Weg zum Speichern des Code Signing-Zertifikats ist die Speicherung auf einem Token und das anschließende Aufrufen gemäß dem Subjekt im Zertifikat. Diese Methode ist sicher und praktisch dieselbe wie das vorherige Signieren mit PFX. Ohne den privaten Schlüssel, der nicht vom Token exportiert werden kann, ist das Zertifikat wertlos und ein Missbrauch ist damit nicht möglich; bei fünfmaliger falscher Eingabe des Passworts wird das Token gesperrt.
Das Signieren mit der Verwendung des Speichers erfordert dann den Parameter /n SubjectName:
signtool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Oder Sie können den Standard-Speicher My wählen und die signierende Software wird das Zertifikat automatisch selbst finden:
signtool sign /s My /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Automatisierung von Code Signing mittels Cloud HSM
Die Automatisierung des Signierens von Code wird sehr gewünscht, mit einem Zertifikat auf einem Token kann jedoch nicht automatisch signiert werden; Sie können es auch nicht auf einem Server verwenden. Zum Glück kennen wir Dienste, die für die Automatisierung des Signierens geeignet sind. DigiCert bietet den Dienst KeyLocker oder den Software Trust Manager. Signaturschlüssel können Sie auch in einem Cloud-HSM in Azure oder Google Cloud haben.
Weitere Informationen zu den Automatisierungsmöglichkeiten des Signierens von Code finden Sie im Artikel Code Signing Zentrum.
Überprüfung der Signatur
Nun können Sie signieren und Ihre Anwendung hat ihre erste vertrauenswürdige Signatur erhalten. Sie sind sicherlich jetzt daran interessiert, wie Sie die Signatur überprüfen können.
Die Überprüfung ist einerseits mithilfe des Werkzeugs signtool möglich:
signtool verify C:\test.exe
Einfacher kann die Überprüfung durchgeführt werden, indem Sie die Eigenschaften der Datei im Windows Explorer anzeigen. Sie können die Signaturdetails bis ins Detail des verwendeten Zertifikats „auseinandernehmen“.
Es tut uns leid, dass Sie hier für Ihren Bedarf nichts Passendes gefunden haben.
Helfen Sie uns, diesen Artikel zu verbessern. Schreiben Sie uns bitte, was Sie hier erwartet und nicht erfahren haben.