xZubi und Code Signing für Windows Anwendungen
Einmal im Leben kommt jeder Fachinformatiker mit Windows in Kontakt. Unser xZubi im dritten Lehrjahr ist nun im Bilde, welche Schritte notwendig sind, um erfolgreich Anwendungen mit einem Code Signing / Extended Validation (EV) Code Signing Zertifikat zu signieren. Vor dem eigentlichen Signieren steht nämlich die Bedarfsanalyse und auch eine Analyse nach geeigneten Maßnahmen und Tools um das Vorhaben umzusetzen.
Beim Thema Zertifikate muss immer das Stichwort Public Key Infrastructure (PKI) im Hinterkopf sein. Bei x509 muss es klingeln und auch die „v3 extensions“ dürfen einem nicht fremd sein. Interessierte am Thema können hier die Anforderungen für EV Code Signing Certificates nachlesen. Ein Startpunkt ins Thema x509 kann https://tools.ietf.org/html/rfc5280 sein.
Bei unserem Vorhaben, haben wir uns für den Einsatz eines Hardware Security Module (HSM) von Nitrokey entschieden. Wenn jetzt noch Windows im Spiel ist, ist es hilfreich sich mit der “good old” Microsoft Management Console (MMC) auszukennen. Bei dem Thema Zertifikate unter Windows passiert es schon einmal, dass man falsch abbiegt und dann “Dinge” nicht wie erwartet funktionieren.
Damit das „Rad“ nicht neu erfunden werden muss, teilen wir nun hier unsere Erfahrungen (vielleicht hilft dies ja dem Leser, um schneller ans Ziel zu kommen).
Geeignete Certificate Authorities (CAs) für EV code signing für Windows Anwendungen sind hier zu finden. Das Microsoft signtool für Windows 10 bekommt man hier und nach der Installation haben wir es in folgendem Ordner gefunden:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64>signtool.exe
Um das HSM unter Windows zu verwenden, nutzen wir das Tool OpenSC „Open source smart card tools“ und den Guide im OpenSC Wiki als Vorlage und haben es an „Windows“ angepasst. Die Initialisierung und Erstellung des RSA 4096bit Schlüssels gelingt dabei wie im Flug.
Da wir nicht alles selbst kompilieren wollen, haben wir einen Blick auf „fertigen“ OpenSSL Versionen für Windows geworfen und einige Varianten ausprobiert. Leider haben wir die pkcs#11-Engine unter Windows nicht mit unserem HSM dazu bewegen können, uns einen Certificate Signing Request (CSR) zu erstellen. Der Support von Nitrokey war für uns sehr hilfreich, die Links zum Nitrokey Forum haben uns stark dabei geholfen eine Alternative zu OpenSSL zu finden. Darüber sind wir auf das Tool XCA aufmerksam geworden und haben entschieden dies auszuprobieren. In Verbindung mit dem pkcs#11-Treiber von OpenSC konnten wir erfolgreich einen CSR erstellen.
Signieren funktionierte für uns mit folgendem Befehl:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64>signtool.exe sign /tr http://rfc3161timestamp.globalsign.com/advanced /td SHA256 /fd SHA256
Achtung! Ohne /fd Parameter signiert signtool.exe nur mit sha1. Das will man Stand 2020 spätestens aber nicht mehr.
Hilfreich fanden wir folgende Befehle:
C:\Program Files\OpenSC Project\OpenSC\tools>pkcs11-tool.exe -O C:\Program Files\OpenSC Project\OpenSC\tools>pkcs11-tool.exe -l --write-object --type data --label
Mit den Befehlen kann man den “Inhalt” des HSM auslesen, sowie die Zertifikate im korrekten DER-Format auf das HSM schreiben und mit z.B. der BASH per OpenSSL das Zertifikat im PEM-Format in das gewünschte DER-Format konvertieren. Wer OpenSSL unter Windows verwendet kann dies natürlich auch dort tun.