Wie man Anwendungen auf Windows signiert (SDK)
Schauen wir uns gemeinsam das Signieren von Anwendungen auf Windows mithilfe des Windows SDK (SignTool-Werkzeugs) und eines Code Signing-Zertifikats an. Die Anleitung setzt ein vorbereitetes Code Signing-Zertifikat im PFX-Format und die auf dem Betriebssystem Windows installierte Entwicklungsumgebung Windows SDK voraus. 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
Signtool.exe ist ein Programm, das Anwendungen mit einem Code Signing-Zertifikat signiert. Nach der Installation des Windows SDK verwenden Sie es über die Eingabeaufforderung. Um Anwendungen zu signieren, müssen Sie die grundlegenden Parameter kennen, damit Sie die Anwendung korrekt mit dem richtigen Zertifikat und den richtigen Einstellungen signieren können.
Das Signieren erfolgt tatsächlich über die Eingabeaufforderung und das Zertifikat muss auf dem entsprechenden Computer verfügbar sein (es wird nicht 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 Signatur einer Datei. Timestamp ist ein Befehl zum Einfügen eines Zeitstempels, aber das können Sie direkt beim Signieren der Datei tun.
Nützliche Parameter:
- /f SignCertFile – Wenn Sie eine PFX-Datei zum Signieren verwenden, verweist dieser Befehl auf deren Speicherort. Ein Code Signing-Zertifikat als PFX zu erhalten, ist nicht mehr möglich.
- /s StoreName – Wenn Sie ein Zertifikatspeicher verwenden (zum Beispiel auf einem Token), spezifiziert dies, welches verwendet werden soll. Der Standardwert ist My.
- /t URL – Fügt einen Zeitstempel und einen Link dazu hinzu. Die URLs der Zeitstempelserver finden Sie unten.
- /td - Fingerabdruckalgorithmus (Digest) im Zeitstempel. Wählen Sie mindestens den Parameter sha256 oder höher.
- /fd - Fingerabdruckalgorithmus (Digest). Wählen Sie mindestens den Parameter sha256 oder höher.
Die vollständige Dokumentation finden Sie auf der Microsoft-Website oder nach Eingabe des Befehls „signtool sign /?“.
Der vollständige Befehl zum Signieren einer Datei könnte dann beispielsweise so aussehen:
SignTool sign /n "My Company Certificate" /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Verwenden Sie immer einen Zeitstempel. Dadurch wird die signierte Anwendung auch nach Ablauf des für die Signatur verwendeten Zertifikats vertrauenswürdig. Das ist sehr wichtig, da Sie ältere Anwendungen (typischerweise nach zwei Jahren Ablauf des Code Signing-Zertifikats) nicht erneut rückwirkend signieren müssen, damit sie nicht unzuverlässig werden. Wenn Sie zum Zeitpunkt der Signatur einen Zeitstempel verwenden und das Zertifikat gültig ist, wird die Anwendung auch in Zukunft gültig sein.
Es gibt mehrere Server, die Zeitstempel bereitstellen; ich empfehle, den DigiCert-Zeitstempelserver zu verwenden: http://timestamp.digicert.com/
Dieser Server hat keinen Web-Zugang auf Port 80, daher ist es sinnlos, ihn mit einem Browser zu besuchen (man sieht nichts).
Zertifikatspeicher
Ein Zertifikat kann an mehreren Orten (in mehreren Speichern) gespeichert sein, und Sie können darauf auf verschiedene Arten zugreifen. Früher war es möglich, ein Zertifikat als PFX-Datei zu speichern, aber das ist nicht mehr möglich. Eine PFX-Datei kann Ihnen gestohlen werden und obwohl sie passwortgeschützt ist, stellt sie ein großes Sicherheitsrisiko dar (Passwörter sind oft sehr schwach). PFX eignet sich vor allem für Backup-Zwecke des S/MIME-Zertifikats oder für das Web.
Die übliche Methode zum Speichern eines Code Signing-Zertifikats ist die Speicherung auf einem Token und der anschließende Abruf nach dem Betreff im Zertifikat. Diese Methode ist sicher und praktisch gleich wie das frühere Signieren mit PFX. Ohne privaten Schlüssel, der nicht vom Token exportiert werden kann, ist das Zertifikat nutzlos und sein Missbrauch somit nicht möglich; bei fünfmaliger falscher Passworteingabe wird der Token gesperrt.
Das Signieren mit 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 Standardspeicher My wählen und die signierende SW findet das Zertifikat automatisch:
signtool sign /s My /td sha256 /fd sha256 /t http://timestamp.digicert.com C:\test.exe
Automatisierung des Code Signing mit Cloud-HSM
Die Automatisierung des Codesignierens ist sehr gefragt, ein Zertifikat auf einem Token kann jedoch nicht automatisch signiert werden; es kann nicht auf einem Server verwendet werden. Glücklicherweise wissen wir über Dienste Bescheid, die sich für die Automatisierung des Signierens eignen. DigiCert bietet den Dienst KeyLocker oder den Software Trust Manager an. Signaturschlüssel können auch in Cloud-HSM in Azure oder Google Cloud gespeichert werden.
Weitere Informationen zu den Möglichkeiten der Automatisierung von Code Signing finden Sie im Artikel Code Signing Center.
Signaturprüfung
Jetzt wissen Sie, wie man signiert, und Ihre Anwendung hat ihren ersten vertrauenswürdigen Signatur erhalten. Jetzt interessiert Sie wahrscheinlich, wie man die Signatur überprüft.
Die Überprüfung ist möglich mit dem Signtool-Werkzeug:
signtool verify C:\test.exe
Einfacher lässt sich die Überprüfung durch Anzeigen der Dateieigenschaften im Windows Explorer durchführen. Die Details der Signatur können Sie bis ins Detail des verwendeten Zertifikats „zerlegen“.
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.