Integration von CFSSL mit dem Lemur Certificate Manager
Im vorherigen Artikel über den Lemur-Zertifikatsmanager haben wir keine Root Certification Authority (CA) eines Drittanbieters für die Client-Zertifikate verwendet. Daher wird in diesem Tutorial die PKI mit CFSSL (Cloudflare’s SSL) aufgebaut und in das Lemur-Projekt integriert. Derzeit gibt es kein Dokument, das dem Anwender hilft, CFSSL in das Lemur-Setup zu integrieren.
Hinweis: Da wir CFSSL als 3rd-Party-Root-Autorität verwenden, müssen wir es zunächst auf einem separaten Rechner einrichten (aber wir richten es auf der gleichen Lemur-Box ein) und danach die Lemur-Conf-Datei ändern, um CFSSL für die Signatur des Zertifikats zu verwenden.
CFSSL installieren
Das CloudFlare SSL wird mit der Programmiersprache „Go“ implementiert, so dass die Installation des „go“-Pakets auf der Maschine erforderlich ist. Der folgende Befehl installiert das erforderliche Paket auf der Maschine.
1. Installation Go
Das Go-Paket wird aus dem Quellcode installiert.
wget https://dl.google.com/go/go1.10.1.linux-amd64.tar.gz
Entpacken Sie das heruntergeladene Archiv und installieren Sie es an dem gewünschten Ort auf dem System. Wir installieren es im Verzeichnis /usr/local. Sie können diese auch unter die gewünschte Position auf dem System legen.
tar -xzvf go1.10.1.linux-amd64.tar.gz
mv go /usr/local
Nach der Installation des Go-Pakets ist es auch erforderlich, eine Umgebungsvariable für das Go-Binary zu setzen. (Sie können es im Benutzerprofil hinzufügen, also machen Sie es zu einer dauerhaften Einstellung). 3 Umgebungsvariablen wie GOROOT, GOPATH und PATH müssen Sie normalerweise setzen.
GOROOT ist der Ort, an dem das Go-Paket auf Ihrem System installiert ist.
export GOROOT=/usr/local/go
GOPATHist der Speicherort Ihres Arbeitsverzeichnisses.
export GOPATH=$HOME/go
Setzen Sie nun die Variable PATH auf den Zugriff auf go binary systemweit.
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
2. Befehl Test Go
Geben Sie nun den Befehl „go“ im Terminal ein. Es wird die Ausgabe wie im folgenden Screenshot dargestellt.
go
3. CFSSL installieren
Wir müssen CFSSL auf dieser Ubuntu-Plattform installieren. Wenn die erforderlichen Umgebungsvariablen für GO richtig eingestellt sind, ist der CFSSL-Installationsprozess einfach.
a. Der folgende Befehl lädt das CFSSL-Dienstprogramm herunter und erstellt es im Pfad $GOPATH/bin/bin/.
go get -u github.com/cloudflare/cfssl/cmd/cfssl
b. Der folgende Befehl installiert das json-Plugin des CFSSL-Pakets, das benötigt wird, da CFSSL JSON-Anfragen bearbeitet.
go get -u github.com/cloudflare/cfssl/cmd/cfssljson
c. Installieren Sie einfach alle Programme von CFSSL mit dem unten angegebenen Befehl. Dieser Befehl lädt, erstellt und installiert alle Dienstprogramme (einschließlich cfssl, cfssljson und mkbundle unter anderem) in das Verzeichnis $GOPATH/bin/bin/.
go get -u github.com/cloudflare/cfssl/cmd/...
Wie unten gezeigt, führen Sie den Befehl „cfssl“ im Terminal aus und es wird der gesamte von der CFSSL PKI unterstützte Vorgang angezeigt.
PKI-Setup von CFSSL
Die Konfigurationsdateien „CSR_configuration“ und „signing_configuration“ sind für das CFSSL-Setup wichtig. Die Konfigurationsdatei „CSR“ enthält die Konfiguration für das Schlüsselpaar, das Sie erstellen möchten, und die Konfiguration „Signing“, wie der Name schon sagt, stellt die Konfigurationsregeln auf.
Wurzel CA anlegen
Für die Root CA siehe folgende CSR-Konfigurationsdatei (die wir csr_ROOT_CA.json nennen werden):
- csr_ROOT_CA.json
{ "CN": "MY-ROOT-CA", "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "UK", "L": "London", "O": "My Organisation", "OU": "My Organisational Unit Inside My Organisation" } ], "ca": { "expiry": "262800h" } }
Nachfolgend wird eine kurze Erläuterung der verschiedenen Felder gegeben.
- Die Konfigurationsdatei folgt dem X.509-Namensschema, daher sind die folgenden Felder erforderlich:
- CN (Common Name) – Der Name der Entität. Im Root CA Fall ist es der Root CA Name;
- C (Land)
- L (Standort)
- O (Organisation)
- OE (Organisationseinheit)
- Nun sind eine Reihe von spezifischen Feldern spezifisch für die CFSSL:
- KEY – Definiert die Schlüsselmerkmale:
- Algo – Gibt den Algorithmus an. Kann ‚rsa‘ oder ‚ecdsa‘ sein, für RSA- bzw. ECDSA-Algorithmen. Nun wird ECDSA immer dann empfohlen, wenn ältere Geräte nicht relevant sind, aber dies gilt nur für Geräte, die weniger als zwei oder drei Jahre alt sind. RSA ist anderweitig zu verwenden.
- size – Gibt die Schlüsselgröße an. 256 ist für den ecdsa-Schlüssel zu verwenden. Für RSA-Schlüssel sind 2048 oder 4096 die empfohlenen Werte.
- ca – Definiert die CA-Merkmale und in diesem Fall die Schlüsselgültigkeit, in Stunden, ja, in Stunden. In diesem Fall sind es 30 Jahre (24x356x30), da die Root-Autorität so lange bestehen soll, wie Sie die Sicherheit des Root-Keys vorausgesehen haben.
- KEY – Definiert die Schlüsselmerkmale:
Führen Sie nun den folgenden Befehl aus, um die Root CA für den Lemur zu erstellen.
cfssl gencert -initca csr_ROOT_CA.json | cfssljson -bare root_ca
Der obige Befehl erstellt die folgenden Dateien auf dem Computer.
- root_ca.csr – Die Anforderung des Root-Ca-Zertifikatszeichens, die für die Root-Ca keinen Sinn macht und daher nie verwendet wird. Da die Root-CA selbstsigniert ist.
- root_ca.pem – Das Root CA-Zertifikat. Dies ist die Datei, die du und um so viel wie möglich zu verteilen.
- root_ca.key – Dies ist der Root CA Key. Bewahren Sie diese Datei sicher und geschützt auf, als ob Ihr Leben davon abhängt. Für eine öffentliche Root CA ist dies eigentlich die Wahrheit.
Die Root CA ist selbstsigniert, also fahren Sie mit dem nächsten Schritt zur Erzeugung einer Zwischen-CA fort.
Zwischen-CA
Die Generierung von Intermediate CA ist nicht zwingend erforderlich, entspricht aber einer Best Practice. Das Endziel einer Zwischen-CA ist es, einen Zwischenschritt in Sachen Sicherheit zu machen. Normalerweise wird der Root CA-Schlüssel auf einem Offline-Computer aufbewahrt und nur verwendet, wenn Sie ein Zwischenzertifikat signieren müssen.
Die Konfigurationsdatei „csr_INTERMEDIATE_CA.json“ wird benötigt, um eine Zwischen-CA zu erstellen.
- csr_INTERMEDIATE_CA.json – Die Anforderung des Zertifikatszeichens für die Zwischen-CA.
{ "CN": "My-Intermediate-CA", "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "UK", "L": "London", "O": "My Organisation", "OU": "My Organisational Unit Inside My Organisation" } ], "ca": { "expiry": "42720h" } }
Die Datei „root_to_intermediate_ca.json“ enthält die Konfiguration der Root CA Signatur.
{ "signing": { "default": { "usages": ["digital signature","cert sign","crl sign","signing"], "expiry": "262800h", "ca_constraint": {"is_ca": true, "max_path_len":0, "max_path_len_zero": true} } } }
Diese Datei enthält die wichtigsten Parameter für ein Zertifikat.
- usages – Welche usages dürfen durch das zu signierende Zertifikat durchgeführt werden. Die von CFSSL unterstützten Optionen sind die folgenden:
- „Digitale Signatur“,
- „Bestätigungsschild“,
- “ crl sign“,
- “ Unterzeichnung“
- etc
- is_ca – dieses Feld ist nur für die Generierung von Intermedia CAs Zertifikaten anwendbar und ermöglicht es dem generierten Zertifikat, andere Zertifikate zu signieren. Wenn Sie dieses Feld auf einem Endgerätezertifikat belassen, wird es von den meisten gängigen Browsern und Betriebssystemen abgelehnt.
Der folgende Befehl erstellt eine Zwischen-CA anhand der oben genannten Konfiguration.
cfssl gencert -initca csr_INTERMEDIATE_CA.json | cfssljson -bare intermediate_ca
Der obige Befehl erstellt die folgenden Dateien der Zwischen-CA.
- intermediate_ca.csr – Die Anforderung des Zeichens für das Zwischenzertifikat der CA.
- intermediate_ca.pem – Das Intermediate CA-Zertifikat, von niemandem signiert und daher nutzlos.
- intermediate_ca.key – Dies ist der Zwischen-CA-Schlüssel. Bewahren Sie diese Datei sicher und geschützt auf.
Der folgende Befehl zeigt das Signieren des Zwischenzertifikats durch die Stammzertifizierungsstelle.
cfssl sign -ca root_ca.pem -ca-key root_ca-key.pem -config root_to_intermediate_ca.json intermediate_ca.csr | cfssljson -bare intermediate_ca
Der obige Befehl signiert die Datei intermediate_ca.pem. Damit ist die Einstellung der Root- und Intermediate CA abgeschlossen. Es ist wichtig, Root CA Keys und Konfigurationsdateien sicher und geschützt zu halten. Der nächste Schritt ist die Erstellung eines Zertifikats für das Client-Gerät oder den Kunden. Hier werden wir das CFSSL-Setup in das Lemur-Projekt integrieren und das Zertifikat des Kunden generieren.
CFSSLs PKI ausführen
Um die CFSSL-basierte PKI auszuführen, gehen Sie in das Verzeichnis certs und führen Sie folgenden Befehl aus.
cfssl serve -address 192.168.10.151 -ca root_ca.pem -ca-key root_ca-key.pem -port 8888
Die Ausgabe des obigen Befehls erfolgt wie folgt.
root@test-vm:/home/john/Desktop/certs# cfssl serve -address 192.168.10.151 -ca root_ca.pem -ca-key root_ca-key.pem -port 8888 2018/05/20 16:35:18 [INFO] Initializing signer 2018/05/20 16:35:19 [WARNING] couldn't initialize ocsp signer: open : no such file or directory 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/scaninfo' is enabled 2018/05/20 16:35:19 [WARNING] endpoint 'ocspsign' is disabled: signer not initialized 2018/05/20 16:35:19 [INFO] endpoint '/' is enabled 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/info' is enabled 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/gencrl' is enabled 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/scan' is enabled 2018/05/20 16:35:19 [WARNING] endpoint 'crl' is disabled: cert db not configured (missing -db-config) 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/certinfo' is enabled 2018/05/20 16:35:19 [WARNING] endpoint 'revoke' is disabled: cert db not configured (missing -db-config) 2018/05/20 16:35:19 [INFO] bundler API ready 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/bundle' is enabled 2018/05/20 16:35:19 [INFO] setting up key / CSR generator 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/newkey' is enabled 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/init_ca' is enabled 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/sign' is enabled 2018/05/20 16:35:19 [WARNING] endpoint 'authsign' is disabled: {"code":5200,"message":"Invalid or unknown policy"} 2018/05/20 16:35:19 [INFO] endpoint '/api/v1/cfssl/newcert' is enabled 2018/05/20 16:35:19 [INFO] Handler set up complete. 2018/05/20 16:35:19 [INFO] Now listening on 192.168.10.151:8888
Die IP-Adresse der Maschine ist 192.168.10.151 und der Port 8888. Erlauben Sie diesem Port in der Firewall, die CFSSL zu verwenden.
HINWEIS: Der folgende Befehl ist nur eine Anleitung zur Verwendung des cfssl-Dienstprogramms.
{ cfssl serve [-address address] [-ca cert] [-ca-bundle bundle] \ [-ca-key key] [-int-bundle bundle] [-int-dir dir] [-port port] \ [-metadata file] [-remote remote_host] [-config config] \ [-responder cert] [-responder-key key] [-db-config db-config] }
Nun ist die Konfiguration der CFSSL abgeschlossen und läuft auf der Maschine. Der nächste Schritt ist die Integration von CFSSL mit Lemur.
Lemur-Konfiguration für die PKI von CFSSL
Nun wird die Konfigurationsdatei „lemur.conf.py“ des Lemurs geändert (z.B. URL-, ROOT- und Zwischenschlüssel). Die Konfigurationsdatei enthält die Informationen über die CFSSL. Der Pfad der lemur-Konfigurationsdatei lautet „/home/lemur/.lemur/.lemur/lemur.conf.py“.
CFSSL_URL ="http://192.168.10.151:8888"
CFSSL_ROOT ="""-----BEGIN CERTIFICATE----- MIICcjCCAhegAwIBAgIUahfYPc4RpK92G1ZHhu3q9URvf+8wCgYIKoZIzj0EAwIw 9UmEM4IEd2j8/w4WdTYaBE5EzwIhAN3oW9iAmjcyzC/7BPIY/Sr+twig/+XwnQ8T hKXP2OHd -----END CERTIFICATE-----"""
CFSSL_INTERMEDIATE ="""-----BEGIN CERTIFICATE----- MIICfDCCAiKgAwIBAgIUEeb8Duel8wySG61vCM2UEUD15XQwCgYIKoZIzj0EAwIw qM9lE82tku/b6SMxAlBByQ== -----END CERTIFICATE-----"""
Führen Sie nun den Befehl „lemur start“ aus, um die lemur.conf.py mit CFSSL-Einstellung zu verwenden.
Erstellen von Zertifikaten mit CFSSL
Wenn Sie unserem vorherigen Artikel über den Lemur folgen, rufen Sie das Dashboard auf, um Client-Zertifikate mit Hilfe der Root CA von CFSSL zu erstellen. Erstellen Sie zunächst eine neue Zertifizierungsstelle und wählen Sie das Plugin CFSSL als Root CA.
1. Festlegung verschiedener Parameter der neuen Behörde.
2. Wählen Sie das neu eingerichtete CFSSL-Plugin als Root CA.
Nach der Einrichtung der neuen Zertifizierungsstelle im Lemur ist der nächste Schritt die Generierung eines Zertifikats mit dem neu eingerichteten CFSSL-Plugin.