Wie können Sie Anwendungen auf Windows (SDK) signieren?
Schauen wir uns an, wie Anwendungen auf Windows mit Windows SDK (Signtool) und den Code Signing Zertifikaten signiert werden. Das ausgestellte Code Signing Zertifikat haben Sie bereits als eine PFX-Datei vorhanden und die Entwicklungsumgebung Windows SDK auf das Operationssystem Windows installiert. SDK können Sie auf dem Microsoft Web für Ihre konkrete Windows-Version herunterladen, zum Beispiel Windows Software Development Kit (SDK) for Windows 10.
PFX-Datei erwerben
Für die Signierung von Anwendungen benötigen Sie die bereits erwähnte PFX-Datei, oder Ihr Zertifikat gespeichertes in dem Windows Zertifikatsspeicher. Fürs Importieren des Zertifikats in den Speicher können Sie eben auch die PFX-Datei nutzen (bei dem Import empfehlen wir Ihnen, das Exportieren des privaten Schlüssels nicht zu ermöglichen). Sollten Sie ein in dem Zertifikatsspeicher des Systems gespeichertes Zertifikat nutzen, empfehlen wir Ihnen, seine Sicherungskopie eben in dem PFX-Format zu erstellen.
Es gibt mehrere Optionen, wie Sie die PFX-Datei erstellen können:
- Sie können IIS, welches Teil von Windows ist, nutzen und hier eine Zertifikatsanforderung erstellen. Nach der Ausstellung des Zertifikats können Sie hier die Anforderung abschließen und das Zertifikat in PFX exportieren.
- Die Schlüssel und nachfolgend auch die PFX-Datei können Sie in OpenSSL erstellen. OpenSSL ist in allen Linux-Distributionen integriert, es kann aber auch auf Windows genutzt werden, in den für Windows kompilierten OpenSSL Bibliotheken GnuWin oder Win32OpenSSL. Geben Sie die folgenden Befehle ein:
openssl genrsa -out private-key.key 3072
openssl req -new -key private-key.key -out name.csr
Die Zertifikatsanforderung, also den CSR-Code, geben Sie in die Bestellung des Zertifikats ein. Das ausgestellte Zertifikat speichern Sie und aus dem privaten Schlüssel, dem Zertifikat und dem CA-Zertifikat erstellen Sie die PFX-Datei.
Bevor Sie die PFX erstellen, müssen Sie die P7B-Datei mit den CA-Zertifikaten in ein Textformat umleiten. Die CA -Zertifikate müssen in der PFX enthalten sein, sonst wird die Signatur nicht vertrauenswürdig sein!
openssl pkcs7 -print_certs -in windows_intermediate.p7b -out CAcert.cer
In OpenSSL fügen Sie dann alles in die PFX-Datei zusammen.
openssl pkcs12 -export -in cert.crt -certfile CAcert.cer -inkey key.pem -out output.pfx
- Die dritte und benutzerfreundlichste Option ist Nutzung des grafischen Programms XCA. Hier erstellen Sie die Zertifikatsanforderung und den privaten Schlüssel, nach der Ausstellung importieren Sie das Zertifikat in das Programm und exportieren Sie alle Schlüssel in die PFX-Datei.
Falls Sie sich auf die Erstellung der PFX-Datei nicht trauen oder falls Ihnen einer der Schritte nicht gelingt, hilft Ihnen unser Support gerne weiter.
Nutzung von Signtool
Signtool.exe ist ein Programm, welches Anwendungen mit dem Code Signing Zertifikat in der PFX-Datei signiert. Nach der Installierung von Windows SDK nutzen Sie es über die Kommandozeile. Für die Signierung von Anwendungen müssen Sie die Basis-Parameter kennen, damit Sie die Signierung mit dem richtigen Zertifikat und mit den richtigen Einstellungen aufrufen können.
Die Signierung tatsächlich erfolgt über die Kommandozeile. Somit reicht es aus, das Zertifikat in einer Datei auf dem Rechner gespeichert zu haben, Sie brauchen es nicht irgendwohin zu installieren.
Die Basis-Parameter (Befehle) für die Signierung lauten folgendermaßen:
Signtool Befehl /Parameter
Aus den Befehlen werden Sie sign für die Signierung und verify für die Verifizierung der Signatur der Datei nutzen. Timestamp ist ein Befehl für die Einfügung des Zeitstempels, aber diesen können Sie ebenfalls gleich bei der Signierung der Datei erstellen.
Nützliche Parameter:
- /f SignCertFile – falls Sie für die Signatur eine PFX-Datei nutzen, verweist dieser Befehl auf ihren Speicherort.
- /fd – spezifiziert den Hash-Algorithmus der Signatur. Default ist SHA-1, welcher aber nicht vertrauenswürdig sein wird, deshalb sollte SHA256, also /fd SHA256 benutzt werden.
- /p Password – Eingabe des Passwortes, falls Sie mit PFX signieren.
- /s StoreName – falls Sie den Zertifikatsspeicher nutzen, bestimmt dieser Parameter näher, welcher genutzt werden soll. Default ist My.
- /t URL – fügt ein Zeitstempel und einen Link auf ihn hinzu. Die URL der Timestamp-Server finden Sie unten.
Die vollständigen Unterlagen finden Sie auf dem Microsoft Web oder nach der Eingabe der Kommandozeile „signtool sign /?“.
Die ganze Kommandozeile für die Signierung der Datei kann dann zum Beispiel folgendermaßen aussehen:
SignTool sign /f MyCert.pfx /t http://timestamp.digicert.com C:test.exe
Timestamp, also den Zeitstempel, nutzen Sie immer. Er stellt sicher, dass die signierte Anwendung auch nach dem Ablaufdatum des Zertifikats, welches für die Signierung genutzt wurde, vertrauenswürdig bleibt. Dies ist äußerst wichtig, weil sie dann die älteren Anwendungen nicht erneut signieren werden müssen (typischerweise nach der zweijährigen Gültigkeitsdauer des Code Signing Zertifikats). Wenn Sie im Moment der Signierung den Timestamp nutzen werden und das Zertifikat nicht widerrufen wird, wird auch die Anwendung in der Zukunft ihre Vertrauenswürdigkeit und Gültigkeit behalten.
Es gibt mehrere Server, die die Zeitstempel anbieten, aber wir empfehlen Ihnen, den Timestamp Server von DigiCert zu nutzen: http://timestamp.digicert.com/
Dieser Server hat kein Web auf dem Port 80, deshalb versuchen Sie nicht, ihn mit dem Browser aufzurufen – sie würden nichts sehen.
Zertifikatsspeicher
Das Zertifikat kann in verschiedenen Speichern gespeichert werden und es kann auf verschiedenen Weisen aufgerufen werden. Die meist genutzte Methode ist das PFX-Zertifikat als eine Datei im Rechner zu speichern und nachfolgend auf diese Datei zu verweisen. Diese Methode ist zwar praktisch, aber überhaupt nicht sicher. Die PFX-Datei kann Ihnen jeder entwenden und obwohl sie mit einem Passwort geschützt ist, handelt es sich um ein großes Sicherheitsrisiko. Darüber hinaus sind die Passwörter oft sehr schwach. PFX ist vor allem als Sicherungskopie des Zertifikats geeignet. Ein Beispiel der Signierung mir einer PFX-Datei ist oben aufgeführt.
Die zweite Möglichkeit ist es, das Zertifikat in dem Speicher des Systems zu speichern und es nachfolgend nach dem Subjekt im Zertifikat aufzurufen. Diese Methode ist aber nur unter der Voraussetzung sicherer, dass Sie das Exportieren des privaten Schlüssels nicht zulassen. Ohne den privaten Schlüssel ist das Zertifikat nutzlos und es ist nicht möglich, es aus dem System zu exportieren. Die Signatur mit der Nutzung des Speicherungsortes erfordert den Parameter /n SubjectName:
signtool sign /n "My Company Certificate" /t http://timestamp.digicert.com C:test.exe
Die dritte und sicherste Lösung ist die Zertifikate auf einem Token oder einem sicheren Speicher zu speichern. Das Token nutzen die Code Signing EV Zertifikate aus, die wir Ihnen empfehlen. Das Zertifikat ist in Sicherheit, es kann aus dem Token nicht exportiert werden und falls das Passwort mehrmals falsch eingegeben wird, wird das Zertifikat aus dem Token gelöscht. Das Code Signing EV Zertifikat ist neben der erwähnten sicheren Nutzung auch aus der Sicht der Vertrauenswürdigkeit von Vorteil: mehr dazu können Sie in einem selbständigen Artikel erfahren. Die Signatur mit einem auf einem Token gespeicherten Zertifikat erfordert den Parameter /s StoreName, in diesem Fall den Speicher My:
signtool sign /s My /t http://timestamp.digicert.com C:test.exe
Überprüfung der Signatur
Nun können Sie schon signieren und Ihre Anwendung haben Sie mit der ersten vertrauenswürdigen Signatur versehen. Bestimmt möchten Sie wissen, wie die Signatur überprüft werden kann.
Die Überprüfung ermöglicht das Tool Signtool: signtool verify C:test.exe
Oder Sie können sich die Eigenschaften der Datei in dem Windows Explorer anzeigen lassen. Das Detail der Signatur lässt sich bis zum Detail des genutzten Zertifikats "sezieren".
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.