Letzte Änderung am 14. Juni 2021 by Christoph Jüngling
Bereits in dem Artikel über Makroviren habe ich auf die Möglichkeit hingewiesen, die Sicherheit durch “Code Signing” zu erhöhen. Leider geht das nicht für Access-Applikationen. Daher will ich nun einen Schritt weitergehen und das gleiche Zertifikat für das Signieren einer EXE-Datei verwenden. Damit können wir wenigstens das Installationspaket oder einen mit einem eigenständigem Setup-Tool erstellten Installer signieren.
Alles neu macht der Mai Oktober. Da ich leider vergessen hatte, mein abgelaufenes Code-Signing-Zertifikat rechtzeitig zu verlängern, musste ich ein neues beantragen. Zusätzlich habe ich auch eine neue Windows-Installation unter VirtualBox erzeugt, und jetzt muss ich alles wieder einrichten. Damit es beim nächsten mal einfacher und schneller geht, schreibe ich gleich mal mit. Solche Blogartikel waren übrigens der eigentliche Grund, weshalb ich überhaupt mit dem Bloggen angefangen hatte: Ich wollte an meine Notizen von überall her rankommen. Und da manches sicher auch für andere Leute interessant ist (und mir das Schreiben Spaß macht) wurden dann zahlreiche Artikel daraus.
In diesem Artikel
Das Zertifikat
Ein Zertifikat ist die Bestätigung einer bestandenen Prüfung, wie zum Beispiel der zum Certified Tester. Und obwohl es sich bei dem Code-Signing-Zertifikat um keine persönliche Leistung meinerseits handelt, gilt das oben gesagte auch hier. Denn mit diesem Zertifikat wird mir bestätigt, dass es sich auch wirklich um mich handelt, also dass ich ich bin. Auch das digitale Zertifikat ist also die Bestätigung einer bestandenen Prüfung, q.e.d.
Dieses digitale Code-Signing-Zertifikat erhält man von dafür wiederum zertifizierten Unternehmen. Diese bemühen sich nach Kräften, die Identität des Antragstellers zu überprüfen. Ich musste dazu beim ersten mal nur meine DUNS-Nummer angeben (ich wusste bis dahin gar nicht, dass ich sowas habe). Diesmal war es aus irgend einem Grund aufwändiger, man wollte eine Ausweiskopie und ein Selfie von mir mit dem ins Foto gehaltenen Ausweis. Letzteres war nicht ganz einfach, denn irgendwie schaffte ich es nicht, das Gesicht und den Ausweis gleichermaßen scharf zu kriegen. Mit Selfies habe ich einfach keine Erfahrung :-) aber irgendwann klappte es dann doch und ich konnte das Zertifikat herunterladen und mit etwas Hilfe aus dem Internet auch installieren. Es war nämlich notwendig, eine kleine Konvertierung vorzunehmen, da der Weg, den ich für den Zertifikatsantrag gegangen bin, unnötig umständlich war. Meine Schuld, aber egal. Normalerweise muss man nur darauf achten, den Zertifikatsantrag auf dem selben PC zu generieren, wo später auch das bestätigte Zertifikat installiert werden soll.
Zertifikat – was ist das?
Es handelt sich dabei aber keineswegs um ein PDF, das man ausdrucken, rahmen und an die Bürowand hängen kann. Eigentlich ist es nur ein Datenblock, die Datei heißt lapidar user.crt
, wobei deren Name ziemlich egal ist. Diese Datei wird dann mit dem IE oder Edge geöffnet und installiert. Danach steckt das Zertifikat dann im Windows-Zertifikatsspeicher. Von dort kann man es mit einem Doppelklick einfach anschauen oder auch benutzen.
Wichtig dabei ist der Hinweis im Textfeld “Sie besitzen einen privaten Schlüssel für dieses Zertifikat”. Nur wenn dies angezeigt wird, kann das Zertifikat für die digitale Signierung verwendet werden.
VBA-Makros signieren
Wenn das Zertifikat gültig und korrekt installiert ist, lassen sich damit bereits jetzt VBA-Makros digital signieren, wie schon früher beschrieben. Um eine EXE-Datei zu signieren benötigen wir aber noch ein weiteres Tool.
EXE-Dateien signieren
Die Datei signtool.exe führt die Signierung tatsächlich durch. Es lässt sich offenbar nur als Bestandteil des Windows SDK herunterladen. Dieses wiederum benötigt das Dotnet Framework 4. So kriegt man die Festplatte auch voll. Allerdings benötigt man nicht das gesamte SDK. In einem aktuellen Download reichte es, nur die Installation der “Windows SDK Signing Tools for Desktop Apps” anzuklicken, was letztlich dann nur 3,9 MB Platz auf der Platte benötigt.
Nach der Installation kann man die Datei im Explorer suchen, sie müsste in C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\
liegen. Nun geht es darum, die Kommandozeile für das Signieren einer EXE-Datei herauszufinden. Das ist zunächst nicht sehr kompliziert:
signtool.exe sign DATEINAME
Dieses Kommando muss – wenn man InnoSetup verwendet – ebenda eingerichtet werden, natürlich mit vollständigem Pfad zum Signtool, falls dieser nicht im PATH enthalten ist. Falls zusätzlich eine graphische Oberfläche wie Inno Script Studio verwendet wird, muss die Einrichtung dort ebenfalls erfolgen. Dann kann die Signierung sowohl über die Kommandozeile (mit iscc.exe) als auch über die GUI erfolgen.
Den Dateinamen erhalten wir im InnoSetup-Umfeld mit dem Platzhalter “$f”. Zusammen mit der Angabe eines Timeservers sieht das dann so aus:
signtool sign /a /t http://timestamp.comodoca.com $f
Durch die Option “/a” sucht Signtool automatisch nach dem passendsten Zertifikat. Mit einem anderen Parameter kann man dieses aber auch angeben. Ebenso eine Datei als Quelle dafür, falls man das Zertifikat lieber auf einem USB-Stick hat, anstatt es auf dem PC zu installieren.
Der Timeserver ist nicht zwingend nötig, erlaubt jedoch laut einigen Texten im Internet die Verwendung der Applikation auch nach Ablauf des Schlüssels. Durch den Timeserver wird quasi bestätigt, dass der Schlüssel zur Zeit des Signierens gültig war. Andernfalls wäre die Applikation nur solange installierbar, wie der Schlüssel gültig ist.
Ergebnis
Wir haben nun also (gedanklich) eine Access-Applikation, die wir mittels eines Setups beim Anwender installieren können, und dieses Setup (also nicht die Applikation) ist digital signiert. Das Ergebnis sieht dann z.B. so aus (links ohne, rechts mit Signatur), wenn die Benutzerkontensteuerung ihren Job macht:
Über “Weitere Details anzeigen” besteht dann auch die Möglichkeit, sich das Herausgeberzertifikat anzeigen zu lassen. Damit ist dann erstmal sichergestellt, dass das Installationsprogramm (und vermutlich auch die Access-Applikation) von dem namentlich genannten “verifizierten Herausgeber” stammt. Über den Inhalt an sich sagt so ein Zertifikat natürlich nichts aus. Ein wenig Vertrauen muss man also dennoch aufbringen – und ruhig auch etwas Skepsis. Wer weiß? Vielleicht gibt es ja noch einen “Christoph Juengling” irgendwo da draußen :-)
2 Kommentare
Hallo Herr Jüngling, ich habe ihren Artikel gelesen. Bin aber nicht schlau daraus geworden. Ich habe eine Setup.exe und möchte diese signieren. Brauche ich hierzu ein externes Zertifikat? Oder kann ich dieses mit dem SignTool selbst erstellen? Wenn ja, wie ist die genaue Vorgehensweise. Vielen Dank für Ihre Hilfe. MfG Robert Ross
Autor
Hallo Herr Ross, das SignTool ist lediglich das Werkzeug, mit dem die Signatur erstellt und in die EXE-Datei eingefügt wird. Ein Code-Signing-Zertifikat wird trotzdem benötigt.
Zu Testzwecken gibt es das Tool “Selfcert.exe”, das ebenfalls Zertifikate erzeugen kann. Allerdings sind solche Zertifikate dann nicht “offiziell” bestätigt, was zu entsprechenden Warnmeldungen beim Anwender führt.