Möchte man eine große Menge an Systemen mit Zertifikaten ausrüsten, ist eine manuelle Beantragung und Erneuerung der Zertifikate keine Option. Der einzige gangbare Weg ist Automatisierung.
Für Systeme, die nicht Mitglied der Active Directory Gesamtstruktur sind, ist eine automatische Zertifikatbeantragung über RPC/DCOM keine Option.
Für bestimmte Anwendungsfälle ist das Simple Certificate Enrollment Protocol (SCEP) eine interessante Alternative. Für dieses Protokoll gibt es nicht nur Clients für Windows, sondern mit SSCEP auch für Linux. SSCEP wird unter Anderem von Thin Clients mit dem eLux Betriebssystem verwendet.
Nachfolgend wird beschrieben, wie der SSCEP Client auf einem Debian Buster Linux System eingerichtet wird – entweder, um damit Server zu verwalten, oder das clientseitige Verhalten testen zu können.
Der Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES) bietet eine Möglichkeit, Geräten, welche nicht über eine Kennung im Active Directory verfügen (beispielsweise Netzwerkgeräte wie Router, Switches, Drucker, Thin Clients oder Smartphones und Tablets), Zertifikate von einer Zertifizierungsstelle zu beantragen. Für eine detailliertere Beschreibung siehe Artikel "Grundlagen Registrierungsdienst für Netzwerkgeräte (Network Device Enrollment Service, NDES)".
Übersetzen und installieren des SSCEP Client
Für Debian liegt ist SSCEP bislang leider nicht als Paket vor. Es muss daher selbst aus dem Quelltext übersetzt werden.
Hierzu müssen folgende Abhängigkeiten installiert werden:
apt install git build-essential automake libtool pkg-config libssl-dev
Anschließend kann der Quellcode aus dem Git Repository heruntergeladen werden.
git clone https://github.com/certnanny/sscep.git cd sscep
Da SSCEP mit Blick auf plattformübergreifende Unterstützung entwickelt wurde, müssen die benötigten Dateien zum übersetzen des Quelltextes für Linux erst erzeugt werden.
autoheader libtoolize automake -a -c -f automake --add-missing autoreconf
Anschließend kann der Quellcode übersetzt und das übersetze Programm installiert werden.
./configure make make install
Konfigurieren des SSCEP Client
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
Für die Erzeugung einer Zertifikatanforderung liegt dem Quellcode ein Shellscript namens mkrequest bei, welches ausführbar gemacht und angepasst werden muss.
chmod +x mkrequest nano mkrequest
In der Konfigurationsdatei können die Dateinamen für Zertifikatanforderung und Schlüssel, die allgemeinen Felder des Subject sowie die Schlüssellänge konfiguriert werden.
Bitte beachten, dass die Zertifizierungsstelle hinter NDES die Zertifikatanforderung ablehnen wird, wenn die Schlüssellänge hier zu klein konfiguriert wurde.
Das Script muss außerdem angepasst werden, damit (falls dies verwendet wird) das Einmalkennwort in der richtigen Kodierung vorliegt. Im Bereich "[ req ]" muss folgende Zeile hinzugefügt werden:
string_mask = nombstr
Dieser Schritt ist erforderlich, da OpenSSL in der Standardkonfiguration Zertifikatattribute in UTF-8 kodiert, somit auch das Einmalkennwort, welches als Attribut in der Zertifikatanforderung hinterlegt wird. NDES kann ein in UTF-8 kodiertes Einmalkennwort nicht interpretieren, sodass die Zertifikatbeantragung fehlschlagen würde.
Für SSCEP liegt dem Quelltext ebenfalls eine Konfigurationsdatei bei, welche angepasst werden muss.
nano sscep.cnf
Hier sollten folgende Einstellungen vorgenommen werden:
Variable | Beschreibung | Beispiel |
---|---|---|
URL | Die vollständige Adresse des NDES Servers. | http://{ndes-server}/certsrv/mscep/mscep.dll/pkiclient.exe |
CACertFile | Der Dateiname des Zertifizierungsstellen-Zertifikats (wird im nachfolgenden Schritt vom NDES Server geladen und in diese Datei geschrieben). | ca.crt |
Debug | Debugprotokollierung. Diese ist standardmäßig aktiviert, erzeugt jedoch viel Kommandozeilenausgaben. | false |
Im nächsten Schritt kann nun die GetCACert Operation ausgelöst werden.
sscep getca -f sscep.cnf
NDES liefert mehr als ein Zertifikat zurück. Diese werden analog zur in der URL-Variable konfigurierten Dateinamen mit einem Suffix (0…n) versehen.
Bei einer zweistufigen Zertifizierungsstellen-Hierarchie sind es insgesamt vier Zertifikate:
Dateiname | Zertifikattyp |
---|---|
ca.crt-0 | NDES Enrollment Agent Zertifikat |
ca.crt-1 | NDES CEP Encryption Zertifikat |
ca.crt-2 | CA-Zertifikat der Stammzertifizierungsstelle |
ca.crt-3 | CA-Zertifikat der ausstellenden Zertifizierungsstelle |
Das CA-Zertifikat der Stammzertifizierungsstelle kann (und sollte) mit folgendem Befehl überprüft werden, ob es sich um die korrekte Zertifizierungsstelle handelt (der MD5 Fingerabdruck wird in der NDES-Administrations-Webseite angezeigt, das RFC verlangt, dass diesem explizit vertraut wird):
openssl x509 -in ./ca.crt-2 -noout -fingerprint -md5
Anschließend muss die sscep.cnf erneut bearbeitet werden.
nano sscep.cnf
Folgende Variablen müssen definiert werden.
Variable | Beschreibung | Beispiel |
---|---|---|
CaCertFile | muss dem NDES Enrollment Agent Zertifikat entsprechen | ca.crt-0 |
EncCertFile | muss dem NDES CEP Encryption Zertifikat entsprechen | ca.crt-1 |
LocalCertFile | muss dem Dateinamen des zurückgegebenen Zertifikats entsprechen | local.cer |
CertReqFile | muss dem zuvor erzeugten CSR entsprechen | local.csr |
PrivateKeyFile | muss dem Private Key des zuvor erzeugten CSR entsprechen | local.key |
Beantragen eines Zertifikats mit SSCEP
Nachdem die Konfiguration abgeschlossen ist, kann die Erstellung der Zertifikatanforderung und Beantragung eines Zertifikats erfolgen. Wenn der NDES-Server ein Einmalkennwort verlangt, muss dieses vorher natürlich über die NDES-Administrations-Webseite beantragt werden.
./mkrequest -dns 'testsceprequest' {Einmalkennwort} sscep enroll -f ./sscep.cnf
Fehlersuche
SSCEP wird leider in fast allen Fällen die gleiche Fehlermeldung ausgeben, wenn der NDES-Server die Zertifikatanforderung abgelehnt hat:
sscep: reason: Transaction not permitted or supported sscep: illegal size of payload
Hier einige mögliche Ursachen, welche diese Fehlermeldung auslösen können:
- Falsches oder bereits verwendetes Challenge Password verwendet (würde Ereignis Nr. 29 auf dem NDES-Server auslösen).
- Kodierung des Challenge Password in UTF-8 anstelle PrintableString (würde Ereignis Nr. 29 auf dem NDES-Server auslösen).
- Schlüsselgröße zu klein (würde Ereignis Nr. 31 auf dem NDES-Server auslösen).
In der sscep.cnf kann die Debug-Direktive auf true gesetzt werden, um detailliertere Meldungen sowie die SCEP-Nachrichten auf der Kommandozeile auszugeben. In der PKCS#7 Antwort des NDES Servers befindet sich in der Regel ein Attribut, welches den SCEP-Fehlercode gemäß RFC beinhaltet.
Weiterführende Links
- Zertifikatbeantragung für Windows-Systeme über den Registrierungsdienst für Netzwerkgeräte (NDES) mit Windows PowerShell
- Manuelle Beantragung eines Remotedesktop (RDP) Zertifikats
- Grundlagen manuelle und automatische Zertifikatbeantragung über Lightweight Directory Access Protocol (LDAP) und Remote Procedure Call / Distributed Common Object Model (RPC/DCOM)
Externe Quellen
- certnanny / sscep (GitHub)
- draft-nourse-scep-23 – Simple Certificate Enrollment Protocol (Internet Engineering Task Force)
- Das hardwareunabhängige Betriebssystem für Cloud-Computing (Unicon GmbH)
- OpenSSL req (OpenSSL Software Foundation)
2 Gedanken zu „SSCEP für Linux (Debian Buster) installieren und Zertifikate über den Registrierungsdienst für Netzwerkgeräte (NDES) beantragen“
Kommentare sind geschlossen.