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.
- 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.
- 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
Weitere Artikel zum Thema Active Directory Certificate Services
- Windows WinRM über HTTPs
- CodeSigning Zertifikate mit Windows Server 2019 Zertifikatsdienste
- Umzug einer Windows Zertifizierungsstelle von 2012R2 auf Windows Server 2019
- Virtuelle SmartCards mit Windows 10
- Windows PKI: Root CA Zertifikat und Issuing CA Zertifikate erneuern
- Installation einer Zertifizierungsstelle unter Windows Server 2012R2 Teil 2 – Erstellen der unter geordneten CA
- Installation einer Zertifizierungsstelle unter Windows Server 2012R2 Teil 1 – Die Offline Root-CA
- Grundlegendes einer Zertifizierungsstellen (CA)