VBA-Makros selbstsigniert
Sicherheit und Bequemlichkeit schließen sich oft gegenseitig aus - während man für ein Mehr an Sicherheit einen Teil Bequemlichkeit opfert, muß meist an der Sicherheit gespart werden, damit’s bequem wird.
Spürbar wird dies zum Beispiel bei der Verwendung von VBA-Makros: Ist in Excel die Makro-Sicherheit auf “Hoch” eingestellt, können Makros in der Regel keinen Schaden anrichten, da sie nicht ausgeführt werden dürfen. In der Einstellung “Mittel” muß bei jedem Öffnen einer Arbeitsmappe mit Makros entschieden werden, ob die Makros ausgeführt werden dürfen oder nicht. In der Einstellung “Niedrig” wird jedes Makro ohne lästige Nachfrage ausgeführt, inklusive eventuell darin enthaltenem Schadcode.
Eine elegangte Lösung dieses Szenarios stellt das Signieren selbst erstellter Makros dar - einmal als vertrauenswürdig eingestuft, werden diese auch auf Sicherheitsstufe “Hoch” ausgeführt und die Nachfrage auf Sicherheitsstufe “Mittel” entfällt.
Hierzu muß nicht unbedingt ein kostenpflichtiges Zerfitikat einer offiziellen Certificate Authority erworben werden, für den internen Einsatz reicht auch die Verwendung eines selbstsignierten Zertifikats, das mit frei verfügbaren Mitteln erstellt werden kann.
Als einfachste Möglichkeit, die zur Zertifikatserstellung benötigte Datei “makecert.exe” zu erhalten (älteren Versionen fehlen einige der benötigten Optionen) wird das rund 370MB große “.NET Framework Version 2.0 Software Development Kit” heruntergeladen und installiert.
Bei der Installation kann auf die “Schnellstart-Beispiele” sowie die “Produktdokumentation” verzichtet werden, lediglich die “Tools und Debugger” müssen installiert werden.
Nach Ende des Installationsvorgangs finden sich die gesuchte Datei im Unterordner “v2.0/Bin” des während der Installation gewählten Verzeichnisses (standardmäßig “C:\Programme\Microsoft.NET\SDK\v2.0\Bin”) und sollte von dort für das weitere Vorgehen direkt in ein Arbeitsverzeichnis (z.B. “C:\cert”) kopiert werden.
Anschließend wird makecert mit einer ganzen Reihe an Parametern aufgerufen, wobei Frau Mustermann durch den gewünschten Namen des Zertifikatsinhabers zu ersetzen und ggf. das Gültigkeitsdatum anzupassen ist.
makecert -r -pe -n "CN=Erika Mustermann" -b 01/01/2011 -e 01/01/2030 -eku 1.3.6.1.5.5.7.3.3 -ss my -sr currentuser -sky signature -sp "Microsoft Enhanced Cryptographic Provider v1.0" -sy 1
Nach erfolgreicher Ausführung meldet sich makecert mit “Succeeded”.
Vor dem ersten Signieren sollte aus Sicherheitsgründen der gesamte Schlüssel (privater und öffentlicher Teil) exportiert und an einem sicheren Ort aufbewahrt werden.
Hierzu unter “Start” / “Ausführen” den Befehl “certmgr.msc” eintippen und in der Übersicht der Zertifikate des aktuellen Benutzers den Pfad “Eigene Zertifikate” / “Zertifikate” wählen.
Das Zertifikat mit der rechten Maustaste anklicken, und “Alle Aufgaben” / “Exportieren” wählen. Es öffnet sich der Zertifikatexport-Assistent. Hier auswählen, daß der private Schlüssel exportiert werden soll, das Dateiformat bei “PKCS #12” belassen und ein beliebiges Kennwort wählen, dann kann das Zertifikat gespeichert werden.
Da die Makros mit dem privaten Schlüssel signiert werden, wird auf den Arbeitsplätzen, welche hinterher die Makros ausführen sollen, das zugehörige öffentliche Zertifikat benötigt.
Um dieses zu Exportieren, erneut den Assistenten starten, diesmal den privaten Schlüssel nicht exportieren und als Dateiformat “DER-codiert-binär X.509” wählen.
Anschließend können beliebige VBA-Makros mit dem soeben erstellten Schlüssel signiert werden.
Hierzu in Excel unter “Extras”, “Makro” den “Visual Basic Editor” öffnen und mittels “Extras” “Digitale Signatur” den Signatur-Dialog öffnen.
Die Schaltfläche “Wählen” klicken und das soeben erzeugte Zertifikat bestätigen.
Das VBA-Projekt ist hiermit signiert, der Dialog kann geschlossen werden.
Beim erstmaligen Öffnen der soeben signierten Arbeitsmappe erscheint noch einmal eine Sicherheitswarnung, in der - nach einer Prüfung des Zertifikats - ein Haken bei “Makros aus dieser Quelle immer vertrauen” gesetzt werden und anschließend auf “Makros aktivieren” geklickt werden kann.
Um die Makros auf auf andern PCs ohne Nachfrage ausführen zu können, ist die exportierte “.cer”-Datei auf diese Rechner zu übertragen und dort per Doppelklick zu installieren.
Sollte nach Installation des Zertifikats die Checkbox “Makros aus dieser Quelle immer vertrauen.” deaktiviert sein, so wurde bei der (automatischen) Installation des Zertifikats der falsche Zertifikatsspeicher gewählt.
Genauere Auskunft hierüber gibt ein Klick auf “Details”: Im sich öffnenden “Zertifikat”-Dialog zur Registerkarte “Zertifizierungspfad” wechseln und die Meldung im Feld “Zertifizierungsstatus” beachten, z.B.
Dieses Zertifizierungsstellen-Stammzertifikat ist nicht vertrauenswürdig, da es sich nicht in dem Speicher vertrauenswürdiger Stammzertifizierungsstellen befindet.
Das Zertifikat erneut von Hand installieren und diesmal den genannten Zertifikatsspeicher manuell auswählen.
PS: Meistens scheitert die Wiederherstellung, weil die Leute schon ein Woche später nicht mehr wissen, was sie für ein Passwort gewählt haben.
Das Gegenstück, der öffentliche Schlüssel, hingegen braucht jeder, um überprüfen zu können, dass die Signatur des Codes mit Deinem privaten Schlüssel signiert wurde.
PS 2: Im weiteren wäre es möglich, mit dem öffentlichen Schlüssel Deines Zertifikats eine Nachricht zu verschlüsseln, welche dann nur noch von Dir mit deinem privaten Schlüssel wieder entschlüsselt werden könnte. (Zum Beispiel ein Bug Report.)