Eigene Zertifizierungsstelle mit OpenSSL

Besitzer eigener Server im Internet kennen das Problem: Um https zu nutzen braucht man SSL Zertifikate, doch Zertifikate von großen Zertifizierungsstellen kosten oft viel Geld. Zwar gibt es kostenlose Zertifikate von StartSSL und co., aber gerade für Dienste wie OpenVPN oder generell für Dienste eines eingeschränkten Nutzerkreises, ist es komfortabler die Zertifikate selber zu erstellen und zu signieren. Damit die Zertifikate dann als gültig akzeptiert werden, muss man nur das Stammzertifikat importiert werden, aber dazu später mehr.

!!!Selbstsignierte SSL Zertifikate sollten niemals für „öffentliche“ Webseiten/Dienste verwendet werden, die von einem großen Nutzerkreis aufgerufen werden, da der Browser stets eine Warnung bringt!!!

Die Vorbereitungen

Für die eigene Zertifizierungsstelle benötigt man folgendes:

  • einen Computer mit einem beliebigen Linux (vorzugsweise der Server)
  • openssl
  • Shell-Zugriff (ssh)

Erstellen der CA (Certificate authority)

Zunächst legt man sich einen neuen Ordner an (es spielt ansich keine Rolle wo dieser Ordner liegt, sofern er nicht von außen erreichbar ist):

mkdir /root/ownca/
cd /root/ownca/

Nun erstellen wir den privaten Schlüssel für die CA. Dieser muss sicher aufbewahrt werden, denn sollte er in falsche Hände geraten, dann sollte man schleunigst alle Zertifikate ersetzen und von vorn anfangen. Häufig findet man in Anleitungen, dass man 2048 oder 4096 Bit nehmen soll. Das ist oft einfacher, denn zum Beispiel MacOS hat Probleme mit 8192 Bit langen Zertifikaten, dennoch ist es die erhöhte Sicherheit wert.

openssl genrsa -des3 -out ca.key 8192

Nun erstellt man das dazugehörige Zertifikat. Wichtige Angaben sind hier vorallem das Land (DE), die Provinz (Bundesland), die Organisation und der Common Name (CN). Beim CN kann man seine Domain nehmen oder irgendwas anderes, denn es spielt ansich keine Rolle. Land, Provinz und Organisation sollte man ordentlich ausfüllen, da alle anderen Zertifikate die man später damit signieren will diese Attribute gleich haben müssen.

openssl req -new -x509 -extensions v3_ca -key ca.key -out ca.crt -days 3650

Als nächstes erstellen wir ein paar Ordner um etwas Ordnung rein zu bringen, denn sobald man ein paar Zertifikate erstellt hat, liegen schon ordentlich viele Dateien rum. Das -m 0700 stellt sicher, dass niemand außer man selbst auf die vertraulichen Keys zugreifen kann.


mkdir -m 0700 \
/root/ownca/certs \
/root/ownca/crl \
/root/ownca/newcerts \
/root/ownca/private

Nun benötigen wir noch eine serial Datei (diese steuert die Seriennummer für die Zertifikate) und eine index.txt (hier stehen später alle Zertifikate aufgelistet)

echo 1000 >> /root/ownca/serial
touch /root/ownca/index.txt

Nun schieben wir den vorhin erstellten Key und das Zertifikat an die richtigen Stellen und ändern gleich noch die Dateiberechtigung des Keys auf eine sichere Einstellung von 400.


mv ca.key private/
chmod 0400 private/ca.key
mv ca.crt certs/

OpenSSL-Config an die eigene CA anpassen

Damit man nicht bei jedem Zertifikat viele Parameter für die CA angeben muss, kann man das in der OpenSSL-Config anpassen. Diese liegt unter Debian und vielen anderen Distributionen unter /etc/ssl/openssl.cnf. 

Folgende Zeilen im Bereich der CA_DEFAULT müssen angepasst werden:


dir = /root/ownca/
certificate = $dir/certs/ca.crt
private_key = $dir/private/ca.key#

Zertifikate signieren

Nun ist alles vorbereitet und wir können mit dem Ausstellen von Zertifikaten beginnen. Zunächst benötigt man einen Request in Form einer CSR. Webinterfaces wie Plesk ermöglichen es diesen direkt zu erstellen. In diesem Fall kann der folgende Schritt ignoriert werden und man muss nur sicher stellen, dann die myreq.csr im Hauptordner liegt.

Einen Request (csr) erstellen

Ein Request + der dazu gehörige Privatekey ist schnell mit folgendem Befehl erstellt:

openssl req -new -nodes -newkey rsa:2048 -keyout mycertkey.key -out myreq.csr -days 365

Dabei immer darauf achten, dass man bei Company, State und Country die gleichen Werte angibt wie bei der CA-Erstellung.

Erstellen des Zertifikates aus dem Request

Das Zertifikat wird mit dem folgenden Aufruf erstellt und liegt dann im Unterordner certs/ bereit. Achtet darauf die Dateien ordentlich zu benennen um nicht im Chaos zu versinken!

openssl ca -out certs/server.crt -infiles myreq.csr

Damit ist dieses Tutorial auch schon abgeschlossen und ihr habt nun eure eigene CA. Was ihr damit alles machen könnt, erfahrt ihr in kommenden Posts.

Solltet ihr Probleme mit dem Tutorial haben oder sollte sich ein Fehler eingeschlichen haben, dann schreibt einfach einen Kommentar.

Any thoughts?