Simon Szustkowski

Ein Blog über alles, was mir gerade so durch den Kopf geht

Nov 4, 2015 - IT

CA-Management mit easyRSA 3

Vor gut einem halben Jahr schrieb ich einen Artikel, wie man OpenCA auf CentOS installieren könne. Leider ist OpenCA mittlerweile dermaßen unmaintained, dass es mit aktuelleren Perl-Versionen nicht mehr funktioniert. Man könnte jetzt gucken, dass man sein Perl irgendwie downgraded, oder einfach erkennen, dass eine unmaintainete sicherheitskritische Software irgendwie doof ist, und sich eine andere Lösung suchen.

Eine solche Lösung ist easyRSA, welches von OpenVPN-Team entwickelt wird, um VPN-Admins einfaches Management der VPN-CA zu ermöglichen. easyRSA ist dabei im Grunde einfach nur ein Wrapper für OpenSSL, der alles etwas vereinfacht. Die Tutorials im Netz sind größtenteils für easyRSA 2 geschrieben, allerdings gibt es mittlerweile die Version 3, die sich von der Bedienung etwas unterscheidet. Ich möchte zu ihrer Installation und Benutzung nun einige Worte verlieren.

Eine Anmerkung noch: Ich vollziehe hier die Installation auf einem Firmenserver nach, der aus dem Internet nicht zu erreichen ist. Deswegen, und aufgrund der Einfachheit wird easyRSA einfach von root aus gesteuert. Ihr solltet euch eventuell überlegen, ob ihr dafür nicht lieber einen eigenen User anlegen wollt.

Also los. easyRSA kann von seiner Github-Release-Page heruntergeladen werden, das Archiv muss dann entpackt werden. In meinem Fall habe ich /opt/easy-rsa/ dafür gewählt. Es fehlt noch ein abschließendes

chmod +x /opt/easy-rsa/easyrsa

Nun zur Konfiguration. easyRSA 3 hat, wie gewohnt, eine vars-Datei, die aber nicht mehr jedes mal manuell gesourced werden muss, sondern als globale Config dient. Also:

cp /opt/easy-rsa/vars.example /opt/easy-rsa/vars
vim /opt/easy-rsa/vars

Da wir unsere easyRSA global installieren, und das Executable aus jedem beliebigen Pfad aufrufen können, muss die Variable EASYRSA angepasst werden, damit die relativen Pfade innerhalb des Executables funktionieren.

set_var EASYRSA "/opt/easy-rsa"

Da aber nun unsere erzeugten Keys nicht in easyRSAs “Homeverzeichnis” landen sollen, sondern im Homeverzeichnis unseres Users, muss zudem die Variable EASYRSA_PKI modifiziert werden.

set_var EASYRSA_PKI "/root/pki"

Weiter unten sollten die EASYRSA_REQ_* Variablen auf sinnvolle Standardwerte, die zur eigenen Organisation passen, geändert werden. Diese Werte werden bei neuen Keys und Signing Requests standardmäßig vorgeschlagen, können dann aber auch noch individuell überschrieben werden.

Nun fehlt noch die Angabe, wie lang die erzeugten Zertifikate halten sollen. Hierzu gibt es die Variable EASYRSA_CA_EXPIRE und EASYRSA_CERT_EXPIRE. Go ahead.

Nachdem easyRSA nun konfiguriert ist, muss seine Executable noch im $PATH bekannt gemacht werden, um es einfacher aufzurufen.

Hierzu schreibt man folgendes in die /root/.bashrc oder äquivalentes in das RC-File der Shell eurer Wahl:

export PATH="$PATH:/opt/easy-rsa"

Nachdem nun alles vorbereitet ist, können die PKI initialisiert werden, und die CA-Zertifikate erzeugt werden.

easyrsa init-pki
easyrsa build-ca

Die PKI-Infrastruktur liegt nun, wie zuvor konfiguriert, in /root/pki. Soll die CA als Client-CA einer übergeordneten CA arbeiten, muss man nun die Dateien /root/pki/ca.crt und /root/pki/private/ca.key mit den erzeugten Zertifikatsdateien der übergeordneten CA ersetzen.

Nun können wir hingehen, und unser erstes CSR erzeugen oder importieren.

easyrsa gen-req EntityName     #ODER
easyrsa import-req /path/to/csr EntityName

Das CSR ist nun in die PKI importiert, und unter /root/pki/reqs/EntityName.req zu finden. Bei der Generierung sieht man, dass die vorher definierten REQ-Werte als Standardwert angezeigt werden.

Liegt nun das CSR vor, kann hierzu ein Zertifikat erstellt werden. Je nachdem, ob man ein Client-Zertifikat, ein Server-Zertifikat, oder ein Zertifikat für eine untergeordnete CA erstellen möchte, lautet der Befehl

easyrsa sign-req client|server|ca EntityName

Man benötigt hierfür natürlich den Key des CA-Zertifikates, der nun abgefragt wird. Das fertige Zertifikat liegt nun unter /root/pki/issued/EntityName.crt im PEM-Format vor, der zugehörige Key ist in /root/pki/private/EntityName.key zu finden. Unter /root/pki/certs_by_serial/ sind sämtliche Zertifikate außerdem noch einmal in der Reihenfolge ihrer Erzeugung zu finden. Dies erklärt auch die Datei /root/pki/serial, in der einfach nur die höchste Seriennummer der erzeugten Zertifikate zu finden ist. In der /root/pki/index.txt findet sich zudem ein Index der erzeugten Zertifikate. Die zusammengehörigen CA- und Key-Files können nun auf die entsprechenden Rechner deployed werden.

Um ein Zertifikat zu revoken, benötigt man zwei Befehle.

easyrsa revoke EntityName 

revoked das Zertifikat, und

easyrsa gen-crl

erzeugt eine Revocation List, die dann an die Authentifizierungsserver o.ä. verteilt werden kann, sodass diese auch wissen, ob anfragende Clients ungültige Zertifikate vorweisen.

Soviel zur grundlegenden Bedienung. Eine vollständige Auflistung aller Möglichkeiten und Befehle, die easyRSA bietet, findet man in der offiziellen README.