Linux trifft Windows-CA
Die Certificate Enrollment Web Services von Microsoft bieten eine einfache Möglichkeit, um X.509-Zertifikate von einer Active Directory Certificate Authority zu beziehen. Dieser Open-Source-Tipp stellt die Protokolle vor und zeigt, wie Sie mithilfe des Tools certmonger Zertifikate auch für Linux-Systeme ausstellen.
Die Certificate Enrollment Web Services wurden mit Windows Server 2008 R2 eingeführt, um die Zertifikatsbeantragung zu modernisieren und flexibler zu gestalten. Im Gegensatz zur klassischen Beantragung über RPC/DCOM, was eine direkte Verbindung zu internen Netzwerkports und eine Domänenmitgliedschaft erfordert, sind sowohl CEP als auch CES als Webservices auf Basis des SOAP-Standards realisiert. Dies erlaubt die Zertifikatsbeantragung über eine HTTPS-Schnittstelle und erleichtert somit die Integration von Systemen, die nicht Teil der Active-Directory-Domäne sind oder sich sogar in entfernten Netzwerken befinden.
CEP und CES: Zwei zentrale Dienste
Der CEP-Dienst (Certificate Enrollment Policy Web Service) basiert auf dem Protokoll MS-XCEP und dient dazu, Clients Informationen über verfügbare Zertifikatsvorlagen und Zertifizierungsstellen bereitzustellen. Diese Informationen stellt der Dienst über eine HTTPS-Schnittstelle zur Verfügung. Die Authentifizierung kann über Kerberos, mit einer Benutzername/Passwort-Kombination, oder einem Clientzertifikat erfolgen.
Der CES-Dienst (Certificate Enrollment Web Service) hingegen basiert auf dem Protokoll MS-WSTEP – einer Microsoft-spezifischen Implementierung des OASIS-Standards WS-TRUST. Er ist für die eigentliche Zertifikatsbeantragung zuständig, indem er Zertifikatsanforderungen (Certificate Signing Requests; CSRs) an die Zertifizierungsstelle weiterleitet. Wie beim CEP erfolgt die Kommunikation über HTTPS und die Authentifizierung erfolgt identisch zum CEP-Protokoll.
Mit certmonger Zertifikate verwalten
Das Tool certmonger unterstützt Sie auf einem Linux-System bei allen Aufgaben, die im Zusammenhang mit der Verwaltung von X.509-Zertifikate stehen. Das gilt vom Generieren eines privaten Schlüssels über die Zertifikatsanforderung (CSR) bis hin zum automatischen Erneuern eines Zertifikats, bevor dieses abläuft.
Mit cepces steht ein Plug-in für den Dienst zur Verfügung, das es Ihnen ermöglicht, mithilfe von CEP/CES ein Zertifikat von einer Active Directory Certificate Authority (AD CS) zu beziehen und dieses unter die Kontrolle von certmonger zu stellen. Diese Funktion wird von Samba dafür verwendet, um mittels einer Group-Policy (GPO) Zertifikate für einen Client automatisch zur Verfügung zu stellen (Certificate Auto Enrollment).
Damit die Kommunikation mit einer Active-Directory-CA über die beiden Protokolle CEP und CES funktioniert, stellen Sie sicher, dass die beiden Rollen "Certificate Enrollment Web Service" und "Certificate Enrollment Policy Web Service" zusätzlich zur eigentlichen Certificate Authority auf einem AD-System installiert sind. Sind diese nicht vorhanden, finden Sie unter [7] und [8] Informationen darüber, wie Sie diese beiden Rollen Ihrer vorhandenen Active-Directory-CA hinzufügen.
Damit einer Active-Directory-CA über die beiden Protokolle CEP und CES funktioniert, stellen Sie sicher, dass die beiden Rollen "Certificate Enrollment Web Service" und "Certificate Enrollment Policy Web Service" zusätzlich zur eigentlichen Certificate Authority auf einem AD-System installiert sind. Sind diese nicht vorhanden, finden Sie unter [7] und [8] Informationen darüber, wie Sie diese beiden Rollen Ihrer vorhandenen Active-Directory-CA hinzufügen.
Zertifikat anfordern
Das folgende Beispiel basiert auf einem aktuellen Fedora-System, funktioniert aber auch auf allen anderen Linux-Systemen, auf denen das Tool certmonger und das Plug-in cepces zur Verfügung stehen. Die Installation der beiden Pakete erfolgt unter Fedora wie gewohnt mithilfe des Paketmanagers dnf aus dem Standardrepository der Distribution:
dnf install certmonger cepces-certmonger
Der Paketmanager fügt selbstständig das CA-Plug-in cepces der certmonger-Konfiguration hinzu. Mit dem folgenden Kommando verifizieren Sie, dass dies erfolgreich geklappt hat:
getcert list-cas [...] CA 'cepces': is-default: no ca-type: EXTERNAL helper-location: /usr/libexec/certmonger/ cepces-submit
Neben einigen weiteren Plug-ins sollten Sie in der Ausgabe des Kommandos nun auch eine CA mit Namen cepces sehen. Taucht dieser Eintrag nicht auf, so fügen Sie das Plug-in mit dem folgenden Kommando einfach manuell hinzu:
getcert add-ca -c cepces -e '/usr/libexec/certmonger/ cepces-submit'
In der Konfigurationsdatei "/etc/cepces/ cepces.conf" hinterlegen Sie dann im nächsten Schritt den Namen des Active-Directoy-Systems, auf dem Sie zuvor die CEP- und CES-Rollen installiert haben:
grep '^server' /etc/cepces/cepces.conf server=ad1-1g7p.win2022-1g7p.test
Mit realmd ab in die Domäne
Bevor Sie nun ein Zertifikat von der Active-Directory-CA anfordern können, müssen Sie das Clientsystem zuvor noch in die Domäne aufnehmen. Das mag etwas verwunderlich wirken, da CEP/CES ja durchaus unterschiedliche Authentifizierungsverfahren unterstützen. Leider ist es aber so, dass das certmonger-Plug-in im Moment nur Kerberos zur Anmeldung an einem AD-System verwendet.
Um den Client nun also in die AD-Domäne aufzunehmen, greifen Sie im einfachsten Fall auf das Tool realmd zurück. Das Paket steht ebenfalls für die meisten Linux-Distributionen zur Verfügung. Ist das Paket auf dem System installiert, führen Sie im ersten Schritt ein Discovery der Domäne durch:
realm discover win2022-1g7p.test
Achten Sie darauf, dass Sie als DNS-Resolver den Server verwenden, der über die AD-DNS-Einträge verfügt. Hat dies funktioniert, nehmen Sie das System im nächsten Schritt mit in die Domäne auf:
realm join win2022-1g7p.test
Mit einem einfach id-Kommando verifizieren Sie, dass Sie Benutzer aus der Domäne abfragen können und mithilfe von kinit testen Sie schließlich auch die Authentifizierung:
id Administrator@win2022-1g7p.test kinit Administrator@win2022-1g7p.test
Hat dies alles funktioniert, können Sie schließlich manuell das eigentliche Zertifikat für Ihr System anfordern:
getcert request -c cepces -k /etc/pki/tls/private/machine.key -f /etc/pki/tls/certs/machine.crt
Mithilfe der Option "-c" verwenden Sie hierfür das zuvor installierte cepces-Plug-in. Hat alles geklappt, so sehen Sie in der Ausgabe von getcert list schließlich, dass ein Zertifikat ausgestellt wurde, und auch das System Journal gibt eine Information über eine erfolgreiche Zertifikatsausstellung aus.
Details zu dem Zertifikat können Sie mithilfe von openssl abfragen:
openssl x509 -in /etc/pki/tls/certs/machine.crt -noout -issuer -subject -dates issuer=DC=test, DC=win2022-1g7p, CN=win2022-1g7p-AD1-1G7P-CA subject=CN=client.win2022-yn6a.test notBefore=May 30 10:18:31 2025 GMT notAfter=May 30 10:18:31 2026 GMT
Fazit
Mit certmonger und dem Plug-in cepces ist es sehr leicht möglich, Zertifikate von einer Active-Directory-CA zu beziehen, wenn die beiden CA-Features CEP und CES vorhanden sind. Aktuell ist hierfür eine Domänenmitgliedschaft des Clients notwendig, da certmonger zur Authentifizierung lediglich Kerberos unterstützt. Dies mag sich in zukünftigen Versionen des Tools ändern.
Alternativ könnten Sie prüfen, ob sich durch zusätzliche Wrapper oder manuelle Anfragen über curl und openssl eine Anmeldung mit Zertifikat oder Passwort realisieren lässt. Für automatisierte Zertifikatsbeantragungen in heterogenen Umgebungen bietet das Zusammenspiel von CEP, CES und certmonger jedoch einen guten Ansatz. (dr)
Dieser Open-Source-Tipp ist im IT-Administrator Magazin der Ausgabe 08/2025 erschienen. Darin finden Sie zahlreiche weitere spannende Beiträge zum Schwerpunkt "Sicherheit für Cloud & Virtualisierung".