CodeSigning Zertifikate mit Windows Server 2019 Zertifikatsdienste

A screenshot of a social media post

CodeSigning Zertifikate gibt es für verschiedene Zwecke. Jeder dieser Zwecke hat bestimmte Anforderungen, wie zum Beispiel die Klasse des Zertifikat (Klasse 1,2 oder 3), oder die Überprüfbarkeit. Manche CodeSigning Zertifikate müssen von Bestimmten Zertifizierungsstellen, zum Beispiel öffentlichen, ausgestellt sein, zum Beispiel Kernelmode-Treiber.

Eine Erklärung über die Unterschiede der verschiedenen Arten von Zertifizierungsstellen finden Sie im Artikel “Grundlegendes einer Zertifizierungsstellen (CA)“. Wenn ihnen eine Private Zertifizierungsstelle für Ihre Zwecke reicht, empfehle ich Ihnen einen Blick in die Artikel “Installation einer Zertifizierungsstelle unter Windows Server 2012R2 Teil 1 – Die Offline Root-CA” und “Installation einer Zertifizierungsstelle unter Windows Server 2012R2 Teil 2 – Erstellen der unter geordneten CA“.

Prüfen Sie also vorher welche Anforderungen Ihr Verwendungszweck hat. Bei einer internen, also Privaten Zertifizierungsstelle ist zu beachten, dass diese auf den Systemen als Vertrauenswürdige Root-CA hinzugefügt werden muss. Klassische Beispiele für interne CodeSigning Verwendungen:

  • Signierung von internen PowerShell Skripten
  • Signierung von Anwendungen für AppLocker Windows Defender Applikation Control oder DeviceGuard
  • Signierung von Macros in Office Dokumenten
  • Signierung anderen Codes, zum Beispiel Visual Studio Projekte

Erstellen der Zertifikatsvorlage

Öffnen Sie die Konsole “Zertifizierungsstelle” und machen Sie einen Klick mit der rechten Maustaste auf “Zertifikatsvorlagen”

Dadurch wird die Zertifikatvorlagenkonsole geöffnet.

Wählen Sie die Vorlage “Codesignatur” aus und machen einen rechten Mausklick und wählen “Vorlage duplizieren”

Im Reiter Kompatibilität wählen Sie bitte als Zertifizierungsstelle mindestens “Windows Server 2012” entsprechend Ihrer CA. Als Zertifikatsempfänger wählen Sie bitte “Windows 8 / Windows Server 2012”. Wenn Sie noch Windows 7 haben, müssen dies entsprechend anpassen. Eventuell können Sie aber die Vorlage dann für bestimmte Zwecke nicht mehr nutzen.

Wählen Sie im Reiter “Allgemein” einen passenden Namen für Ihre Zertifikatsvorlage.

Wechsen Sie in den Reiter “Anforderungsverarbeitung” und aktivieren die Checkbox “Exportieren vom privaten Schlüssel zulassen”.

Wechseln Sie auf den Reiter “Erweiterungen” und Bearbeiten dort die Erweiterung “Basiseinschränkungen”

Aktivieren Sie die Erweiterung in dem Sie die Checkbox “Diese Erweiterung aktivieren” auswählen. Und das Dialogfenster “Basiseinschränkungserweiterung bearbeiten” mit OK schließen.

Aus Sicherheitsgründen empfiehlt es sich, die Ausstellung auf dem Server genehmigen zu lassen. Wählen Sie dazu im Reiter “Ausstellungsvoraussetzungen” die Option “Genehmigung von Zertifikatverwaltung der Zertifizierungsstelle”

Wechseln Sie in den Reiter “Antragstellername” und setzten Sie die Option auf “Informationen werden in der Anforderung angegeben”

Wechseln Sie in den Reiter “Sicherheit” und legen hier die Gruppe fest, die Zertifikate mit dieser Vorlage registrieren darf. Da es sich um sehr Kritische Zertifikate handelt, sollte diese Gruppe relativ klein sein. Es wäre auch eine Option das bestimmte Administratoren die Zertifikat für die entsprechenden Programmierer erzeugen und bereitstellen.

Schließen Sie nun die das Dialogfenster “Eigenschaften der neuen Vorlage” mit einem Klick auf OK.

Schließen Sie nun die Zertifikatevorlagenkonsole und klicken mit der rechten Maustaste auf “Zertifikatvorlagen” und wählen “Neu” > “Auszustellende Zertifikatsvorlage”

Wählen Sie die erzeugte Zertifikatsvorlage.

Nun können Sie entsprechende Zertifikate anfordern.

Anfordern von CodeSigning Zertifikaten

Um ein CodeSigning Zertifikat anzufordern, öffnen Sie die Zertifikate Verwaltung des entsprechenden Benutzers. Klicken Sie mit der rechten Maustaste auf “Eigene Zertifikate” und wählen “Alle Aufgaben” > “Neues Zertifikat anfordern…”

Klicken Sie im ersten Dialogfenster auf “Weiter” und markieren im zweiten “Active Directory-Registrierungsrichtlinie” bevor Sie erneut auf weiter klicken.

Wählen Sie die eben Erzeugte Vorlage aus und klicken auf den Link “Es werden zusätzliche Informationen für diese Zertifikatsregistrierung benötigt. Klicken Sie hier, um die Einstellungen zu konfigurieren.”

Pflegen Sie den Antragssteller gemäß Ihren internen Vorgaben.

Klicken Sie nun auf “Registrieren”

Nun ist das Zertifikat zur Registrierung eingereicht. Bei mir ist es so eingestellt, das CodeSigning Zertifikate vorher freigegeben werden müssen.

Wechseln Sie zur Freigabe nun in die Zertifizierungsstellenkonsole. Unter “Ausstehende Anforderungen” sollte nun der Request stehen. Stellen Sie diesen Request nun aus.

Exportieren Sie das Zertifikat aus der Zertifizierungsstelle. Klicken Sie dazu doppelt auf das Zertifikat und wählen unter “Details” de Option “In Datei kopieren…”

Importieren Sie das Zertifikat in wieder in der Konsole, in der Sie den Request erzeugt haben.

Nun Erscheint das Zertifikat mit dem Privaten Schlüssel. Es empfiehlt sich das Zertifikat inklusive dem Privaten Schlüssel zur Datensicherung zu exportieren. Auch kann das Zertifikat so auf andere Systeme übertragen werden.

Hinzufügen in die Vertrauten Herausgeber

Damit das Codesigning Zertifikat auch von den Systemen akzeptiert wird, sind 2 Schritte nötig.

  1. Der Client muss in der Lage sein das Zertifikat auf Gültigkeit zu Überprüfen. Das bedeutet die CA muss als Vertrauenswürdige Stammzertifizierungsstelle eingetragen sein.
  2. Dem Zertifikat muss als CodeSigning Zertifikat vertraut werden. Dazu muss es als “Vertrauenswürdiger Herausgeber” eingetragen werden.

Beides lässt sich am besten über eine GPO erledigen.

Testen mit der PowerShell

Auf dem Rechner mit dem Installierten Zertifikat einfach ein Test PowerShell-Skript anlegen. Ich nutze dafür eines, meiner Fertigen. Mit dem folgenden Befehl wird das CodeSigning Zertifikat bestimmt. Wenn es mehr wie eines gibt, muss es genauer Spezifiziert werden.

$SignCert = Get-ChildItem cert:\ -recurse -CodeSigningCert

Das Signieren ist ebenso einfach:

Set-AuthenticodeSignature .\invoke-GPupdateDomain_sign.ps1 $SignCert

Das Skript sollte nun Signiert sein, zur Überprüfung betrachten wie den Code. Am Ende vom Skript sollte sich nun ein Signaturblock befinden. Wichtig ist, wenn immer noch eine Warnmeldung erscheint, ist wahrscheinlich die entsprechende Zertifizierungsstelle nicht als Vertrauenswürdige Root-CA eingerichtet.

Wer ein Skript gerne Prüfen möchte, kann das mit dem Befehl:

Get-AuthenticodeSignature -FilePath .\invoke-GPupdateDomain_sign.ps1 -Verbose | fl

Troubleshooting

Wenn ein Skript trotz neuer Signatur nach einer Änderung einen falschen Hash bei der Überprüfung meldet, kann es am Encoding liegen. Dies Problem hat mich schonmal ein paar Stunden beschäftigt. Das kann vor allem passieren, wenn Notepad++ zum Programmieren genutzt wird, aber nicht mit der Richtigen Codierung gespeichert wird. Ich empfehle immer den kostenlosen Power Shell ISE als PowerShell Editor zu verwenden.

Autor: Fabian Niesen

Fabian Niesen ist seit Jahren beruflich als IT-Consultant unterwegs. Hier schreibt er privat und unabhängig von seinem Arbeitgeber. Unter anderem ist er Zertifiziert als MCSA Windows Server 2008 / 2012, MCSA Office 365, MCSA Windows 10, MCSE Messaging, MCT und Novell Certified Linux Administrator. Seit 2016 ist er auch MCT Regional Lead für Deutschland. Seine Hobby’s sind Social Media, Bloggen, Mittelaltermärkte, Historische Lieder und der Hausbau. Zu finden ist er auch auf folgenden Plattformen: -

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere