Michael Krzyzanski

IT und andere Skurrilitäten

Was ist mit der git? Und, sonst so?

Wer sich hierhin mal verirrt, der weiß, dass ich diesen Blog nicht so oft aktualisiere. Das liegt zum einen daran, dass man sich Zeit nehmen muss um mal zwischendurch etwas zu schreiben. Ich schreibe hier aber nur dann wenn ich wirklich Lust dazu habe. Es tut mir leid, wenn hier vielleicht einige lesen, die noch immer auf die Installation von git als Dienst unter OS X warten. Jedoch war ich in den letzten Monaten nicht in der Situation mich weiter mit git zu beschäftigen und so habe ich auch keine Anleitung geschrieben wie die Installation von statten ging. Zu meinem wahrscheinlich eigenen Leidwesen, den um ehrlich zu sein, habe ich das Meiste wohl wieder vergessen. Wie das mit Dokumentationen so ist. Sollte ich in den nächsten Wochen mal die Zeit aufbringen, werde ich mich natürlich an die Anleitung setzen, versprechen kann ich es aber nicht.

Wie einige ja wissen, habe ich ja meinen Arbeitgeber gewechselt und ich bin derzeit sehr begeistert über die neuen Themen mit denen ich mich derzeit beschäftige. Doch davon später mal mehr, denn jetzt ruft das Frühstück.

Übrigens, an alle Safari Nutzer die die Seite besuchen und sich ein wenig über das Layout wundern, es war mir leider nicht möglich bisher, mich an der entsprechenden css auszutoben um das Problem für Euch zu beheben.
Comments

Office Vorlagen in Unternehmen signieren

Kurzbeschreibung


Vor ein paar Monaten stand ich der Herausforderung gegenüber, dass in einer größeren Netzwerkstruktur ein neues Office Paket ausgerollt werden sollte, jedoch sollten die bestehenden Vorlagen, welche VB Scripts enthielten beibehalten werden.

Um ehrlich zu sein lag dieser Beitrag hier eher auf dem Abstellgleis und ich wusste nicht, ob ich ihn überhaupt auf die Seite setzen würde. Jedoch was die Resonanz und das Interesse in den Gesprächen der letzten Wochen so hoch, dass ich mich nun doch dazu entschlossen habe eine kleine Anleitung dazu zu bringen.
Letzten Endes habe ich zwei Wochen gebraucht um auf die Lösung zu kommen und muss zugestehen, dass es mir bis dahin nicht gelungen war eine Anleitung zu finden.

Das Szenario

Wir haben eine größere Microsoft basierende Netzwerkumgebung. In dieser soll eine neue Office Version ausgerollt werden. Die bisher verwendeten Vorlagen sollen weiter verwendet werden, jedoch sollen die Sicherheitseinstellungen in Office beibehalten werden. Daraus ergibt sich das Problem, dass der Code in den Office Vorlagen aus einer Vertrauenswürdigen Quelle stammen muss. Sind die Vorlagen nicht signiert und sie enthalten Quellcode, den Office nicht verifizieren kann, dann hagelt es Sicherheitsmeldungen.

In nachfolgendem geht darum wie man, in der eigenen Umgebung mit Hilfe einer PKI ein Zertifikat erstellt, welches an die Benutzer verteilt wird, um die Macros in den Office Vorlagen zu verifizieren. Beim öffnen der Vorlage wird geprüft ob die Vorlage aus einer Vertrauenswürdigen Quelle stammte. Dadurch muss man die Sicherheitsstufen von Office nicht herabsetzten um die Meldungen zu umgehen. Die Beschreibung hier führt die Schritte auf, welche notwendig sind um diesen Aufbau mit einer internen 
PKI durchzuführen. Aus irgendeinem Grund hat es sich der Hersteller meiner Meinung nach besonders dadurch hervorgetan, so wenige Informationen wie nur möglich, zu diesem Thema herauszugeben. So wird immer auf den Kauf eines entsprechenden Zertifikats hingewiesen oder ein für größere Umgebungen nicht gerade durchführbarer Einsatz des Tools SelfCert.

Eine zu kurze Einführung in Schlüsselpaare


Ich schreibe hier immer wieder von privaten und öffentlichen Schlüsseln bei den Zertifikaten, dies kann etwas verwirrend sein. Um dem Ganzen ein wenig der Verwirrung zu nehmen hier vielleicht eine kurze Umschreibung des Sachverhaltes. Zertifikate bestehen normalerweise aus zwei Teilen. Einem öffentlichen und einem privaten. Vergleichbar ist das zum Beispiel mit einem Nachttresor, den die meisten Banken haben. Es gibt zwei Schlüssel, den einen hat die Bank, das ist der private Schlüssel, damit kann die Bank den Safe öffnen und nachsehen, was die Kunden hinterlegt haben. Von der Bank erhalten alle Kunden einen öffentlichen Schlüssel, er kann den Safe auf der anderen Seite öffnen, wo jedoch nur der Einwurf stattfindet. Der öffentliche Schlüssel wird gewissermaßen nach draußen gegeben und wird benötigt, wenn man der Bank etwas zukommen lassen möchte. Der private Schlüssel ist der einzige mit dem ein Zugriff auf die Gegenstände im Safe erfolgen kann. Früher wurde der Sachverhalt oft so erklärt, dass der erzeugte Schlüssel oder das erstellte Zertifikat sozusagen in zwei Teile gebrochen wird und das beide Teile für die Nutzung benötigt werden. Ein Zertifikat für die digitale Signatur funktioniert im Grunde genommen auf dem Umgekehrten Weg als ein Zertifikat für die Verschlüsselung, der Ablauf ist ein umgedrehter. Bei der Verschlüsselung benutzen alle die den öffentlichen Schlüssel haben, diesen um eine Information zu verschlüsseln. Nur der Besitzer des privaten Schlüssels kann die verschlüsselte Information entschlüsseln. Bei der digitalen Signatur funktioniert das eher so, dass der Besitzer des privaten Schlüssels mit diesem eine Information (in unserem Fall den Quellcode) signiert. Die Empfänger, welche den öffentlichen Schlüssel besitzen, können mit Hilfe der PKI verifizieren ob die Information auch tatsächlich vom Besitzer des privaten Schlüssels stammen.

Vorbereiten der Zertifikatsvorlagen 


Um das Szenario durchführen zu können benötigt man eine PKI, dafür sollte man auf einem Domänen Controller eine CA installiert haben. Man kann natürlich auch eine andere CA als die von Microsoft verwenden, doch die restliche Anleitung geht davon aus, dass man die mitgebrachte CA auf einem Server mit installierten Admin Pack nutzt. Die meisten sollten eine CA bei der Planung ihrer AD und Installation ihrer Umgebung irgendwie rudimentär mit aufgebaut haben. Sonst würde es kaum Sinn machen diese Anleitung zu lesen.

Um den Quellcode in den Office Vorlagen zu zertifizieren wird ein so genanntes Code Signing Zertifikat benötigt. Dieses muss bei der PKI beantragt werden, jedoch ist vor dem Beantragen noch eine Modifikation der Zertifikatsvorlage für das Code Signing nötig. Der Grund ist, dass der öffentliche Teil des Schlüssels, anschließend den Benutzern zugewiesen werden muss, damit anhand dessen die Signatur des Codes verifiziert werden kann. Aus unerklärlich Gründen ist aber das exportieren des öffentlichen Schlüssels in der Zertifikatsvorlage fürs Code Signing deaktiviert. Um den Export zu erlauben müssen die folgenden Schritte durchgeführt werden.

  • Am besten über RDP auf den Server verbinden der die CA hält.
  • Unter Start > Administrativ Tools > Public Key Management anklicken.
  • Aus der Baumstruktur der MMC den Punkt Certificate Templates auswählen.
  • Eine Liste der Zertifikatsvorlagen wird angezeigt. Dort die Code SigninV2 Vorlage auswählen und die Eigenschaften aufrufen.
  • In dem Tab Request Handling den Haken in der Option Allow private key to be exported setzen und mit einem Klick auf OK die Einstellungen bestätigen.

Zertifikat beantragen 


Nun kann eine Code Signing Zertifikat so ausgestellt werden wie wir es benötigen. Ich zeige hier auf wie ich das Zertifikat lokal auf dem Server erzeuge, eigentlich muss aber der Programmierer das Zertifikat von seiner Maschine aus beantragen. Hintergrund ist, dass der Name oder besser gesagt die ID des Beantragenden dann in dem Zertifikat verewigt ist. Wenn man also so etwas durchführt sollte zum einen geklärt sein ob der Programmierer das Zertifikat bei dem Server beantragt und dann mit dem öffentlichen Schlüssel der seinen Namen trägt bei jedem Benutzer im Zertifikatsspeicher auftaucht. Der andere Weg wäre einen Benutzer anzulegen der das Zertifikat beantragt und einen Servicenamen trägt, wie zum Beispiel CodeSigner.

  • Noch in der bestehenden RDP Verbindung einen Browser öffnen.
  • In die Adresszeile http://localhost/certsrv/ eintippen. (Der Programmierer würde hier auf seiner Maschine in die Adresszeile http://server.full.qualified.domain.name/certserv eintippen. Die Maschine sollte sich in der Domäne befinden, sonst hagelt es auch hier andauernd Sicherheitsmeldungen. Dies ist ein wichtiger Punkt für alle die eine andere PKI als die von Microsoft und in die AD integrierte benutzen. Die Clients in der Umgebung müssen der CA vertrauen sonst hat die ganze Aktion wenig Sinn, da es sonst auch weiterhin Sicherheitsmeldungen gibt beim öffnen der Vorlagen.
  • Es öffnet sich die Seite um eine Zertifikat zu beantragen, dort auf den Link Request a certificate klicken.
  • Auf der nachfolgenden Seite den Link advanced certificate request anklicken.
  • Auf der nachfolgenden Seite den Link Create and submit a request to this CA anklicken.
  • Es öffnet sich ein Formular in dem die folgenden Einstellungen gewählt werden müssen:
    • Certificate Template > Code SigningV2
    • Export Keys to file aktivieren
    • Full path name: > c:\MyCodesigningKeys.pvk
  • Nach dem Auswählen der Optionen auf die Schaltfläche Submit > klicken.
  • Sollte eine Sicherheitswarnung der Webseite erscheinen, welche die Bestätigung der Anfrage fordert, diese mit einem klick auf Yes bestätigen.
  • Es kann sein, dass die Anfrage die Sicherheitsregeln nochmals verletzt, wenn der lokale Export in die Datei durchgeführt wird, diesen ebenfalls mit einem Klick auf Yes bestätigen.
  • Es erscheint nach der Generierung des Schlüssels ein Fenster mit dem Titel Create Private Key Password. In dem Dialog hinterlegt man ein Passwort welches man nochmals bestätigen muss.
  • Das Schlüsselpaar wird zu Ende generiert und eine Download Seite erscheint. Auf dieser werden zwei verschiedene Möglichkeiten zum Download des Zertifikates angeboten, sowohl wie auch der gesamte Zertifizierungspfad (Diesen benötigt man, wenn man das Zertifikat auf Maschinen einsetzen möchte welche nicht Teil der Domäne sind. Ich empfehle hier alles Herunterzuladen, auch wenn man das Zertifikat eigentlich nur in der BASE 64 Codierung benötigt. Zum benennen der Zertifikate empfehle ich eindeutige Namen, welche ein ansehen der Zertifikatsinhalte ersparen, z.B.: 20110531_CodeSigningV2_Antragsteller_BASE64.cer; 20110531_CodeSigningV2_Antragsteller_DER.cer; 20110531_CodeSigningV2_Antragsteller_CerPath.p7b 
    Wie gesagt man benötigt den Zertifizierungspfad nicht aber es ist gut die Files mal alle an einem Ort zu halten, man weiß ja nie was angefragt wird.

Exportieren des öffentlichen Schlüssels


Nun müssen wir aus dem 
BASE 64 Zertifikat noch den öffentlichen Schlüssel exportieren. Dieser wird dann über eine GPO an die Benutzer verteilt. Dafür muss man das Zertifikat auf einer Maschine über den Assistenten installiert werden. Dazu kopiert man das BASE 64 Zertifikat auf eine Maschine (Dieser Schritt kann gekoppelt mit dem nachfolgendem auf der Maschine des Programmierers erfolgen) und klickt es doppelt an. Der Assistent startet und man führt die folgenden Schritte durch:
  • BASE 64 Zertifikat doppelt anklicken, es öffnet sich ein Fenster mit den Zertifikatsinformationen.
  • Den Tab Details auswählen.
  • Das Feld Public key auswählen, unten wird dann der Schlüssel angezeigt.
  • Auf die Schaltfläche Copy to File... klicken.
  • Den Willkommensbildschirm mit einem Klick auf die Schaltfläche Next > übergehen.
  • Den Zertifikatstyp Base64 encoded X.509(.CER) auswählen und auf die Schaltfläche Next > klicken.
  • Den Dateinamen für den öffentlichen Schlüssel angeben z.B.:20110531_CodeSigningV2_Antragsteller_BASE64_PUBLIC.cer und auf die Schaltfläche Next klicken.
  • Den Assistenten mit einem Klick auf die Schaltfläche Finish beenden.
  • Die Exportbestätigung mit einem Klick auf die Schaltfläche OK bestätigen.

Zertifizieren des Quellcodes


Den privaten Schlüssel (also das erzeugte Zertifikat) übergibt man dem Verantwortlichen Programmierer, dieser signiert damit den Quellcode seines Makros. Bei Office 2010 funktioniert das so. Der Programmierer sollte das Zertifikat installieren (Dafür wird das in der zweiten Anleitung unter Punkt 10 beschriebene Passwort verwendet) und anschließend wird in Office 2010 die Vorlage geöffnet. Dort öffnet er das Makro und fügt die Digitale Signatur unter dem Menüpunkt Tools ein. Ich umschreibe das hier nicht Näher, da die meisten Entwickler, das selbst beherrschen.

Verteilen des öffentlichen Schlüssels 


Nun muss der öffentliche Schlüssel über eine passende GPO an die Benutzer verteilt werden, damit diese beim Aufruf der Vorlage, den signierten Quellcode ohne eine Warnmeldung ausführen. Der Quellcode wird dann gegen mit dem verteilten öffentlichen Schlüssel aus dem Zertifikatsspeicher verglichen und gilt bei einer positiven Bestätigung als vertrauenswürdig.

  • Mit RDP auf einen Server mit den administrativen Werkzeugen oder auf der Maschine mit den installierten administrativen Werkzeugen anmelden.
  • Unter Start > Administrative Tools > Group Policy management auswählen.
  • In der MMC den Bereich Group Policy Objects erweitern und die entsprechende Richtlinie auswählen (Office2010).
  • Rechtklick auf die Richtline und den Punkt Edit... auswählen.
  • in dem neuem Fenster die Baumstruktur unter User Configuration erweitern zu User Configuration > Windows SettingsSecurity Settings und falls nicht vorhanden eine neue Software Restriction Policy anlegen.
  • Wenn eine Software Restriction Policy vorhanden ist, diese erweitern bis Additional Rules und diese auswählen.
  • Rechtsklick im rechten Fensterbereich öffnet ein Menü in dem man den Punkt New Certificate Rule... auswählt.
  • In dem neu erschienenem Fenster auf die Schaltfläche Browse... klicken und den öffentlichen Schlüssel auswählen (den sollte man natürlich irgendwo zugriffsbereit liegen haben).
  • Das Dropdown Feld Security Level erweitern und den Punkt Unrestricted auswählen.
  • In dem Freitextfeld Description sollte ein kurzer Text eingetragen werden der erklärt, wofür das Zertifikat gut ist, anschließend die Einstellungen mit einem Klick auf die Schaltfläche OK übernehmen.
  • Die Richtlinie der entsprechenden Benutzergruppe zuweisen. Das Zertifikat wird dann automatisch bei dem Anwender im Zertifikatsspeicher des Benutzers hinterlegt und kann so beim öffnen des digital signierten Codes überprüft werden.

Damit sollte das Ganze abgeschlossen sein. Jedoch sollte man immer noch das Ganze testen. Bevor man mit so etwas live geht empfiehlt es sich eine Testumgebung zu nutzen oder entsprechend die Richtlinie nur auf eine OU anwenden in der man entsprechende Testbenutzer hat.

Das war es auch schon. Ich hoffe, das ist jemandem da draußen wenigstens ein wenig von Nutzen.

WARNUNG!


Wie bei allen Anleitungen auf meiner Seite gilt auch hier, ich übernehme keine Haftung auf Richtigkeit und Schäden die durch die Umsetzung der Anleitungen entstehen könnten!
Wer Fehler findet, den bitte ich mich zu kontaktieren, damit ich diese korrigieren kann.

Comments


May 2015
Oct 2014
Jan 2013
Oct 2012
Jan 2012
Aug 2011
Jul 2011
Mar 2011
Feb 2011
Nov 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010