SSCEP für Linux (Debian Buster) installieren und Zertifikate über den Registrierungsdienst für Netzwerkgeräte (NDES) beantragen

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

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:

VariableBeschreibungBeispiel
URLDie vollständige Adresse des NDES Servers.http://<ndes-server>/certsrv/mscep/mscep.dll/pkiclient.exe
CACertFileDer Dateiname des Zertifizierungsstellen-Zertifikats (wird im nachfolgenden Schritt vom NDES Server geladen und in diese Datei geschrieben).ca.crt
DebugDebugprotokollierung. 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:

DateinameZertifikattyp
ca.crt-0NDES Enrollment Agent Zertifikat
ca.crt-1NDES CEP Encryption Zertifikat
ca.crt-2CA-Zertifikat der Stammzertifizierungsstelle
ca.crt-3CA-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.

VariableBeschreibungBeispiel
CaCertFilemuss dem NDES Enrollment Agent Zertifikat entsprechenca.crt-0
EncCertFilemuss dem NDES CEP Encryption Zertifikat entsprechenca.crt-1
LocalCertFilemuss dem Dateinamen des zurückgegebenen Zertifikats entsprechenlocal.cer
CertReqFilemuss dem zuvor erzeugten CSR entsprechenlocal.csr
PrivateKeyFilemuss dem Private Key des zuvor erzeugten CSR entsprechenlocal.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:

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

Externe Quellen

2 Gedanken zu „SSCEP für Linux (Debian Buster) installieren und Zertifikate über den Registrierungsdienst für Netzwerkgeräte (NDES) beantragen“

Kommentare sind geschlossen.