Eigene CA betreiben – Schritt 1 (eigene CA erstellen)

Wir betreiben hier verschiedene Webserver, die nur internen Zwecken dienen, aber die Daten dennoch verschlüsselt ausliefern. Nun ist es ziemlich nervig bei jedem Aufruf diese „Diese Seite ist nicht sicher“-Warnung wegklicken zu müssen. Außerdem besteht die Gefahr, dass die User sich daran gewöhnen, dass diese Warnmeldung kommt und die auch dann missachten, wenn echt mal Gefahr droht.

Wir müssen also gültige Zertifikate für diese Server ausstellen, damit die SSL/TLS verschlüsselte Übertragung per https ohne Fehlermeldung funktioniert. Während das bei extern erreichbaren Webservern ja recht einfach ist, dürfte es schwierig werden eine CA (certificate authority) zu finden, die einem ein Zertifikat für die Domain firma.local ausstellt.

Wir müssen also unsere lokale CA gründen, den Rechnern in der Windows-Domain beibringen dieser CA zu vertrauen und dann von unserer internen CA Zertifikate für diverse Server erstellen lassen und installieren.

Klingt nach viel Arbeit – ist es leider auch – aber nicht so kompliziert wie es eigentlich klingt, fangen wir einfach mal an.

Für unsere CA nutze ich einen virtuellen Linux-Server unter Ubuntu 16.04 LTS, die interne Domain lautet fafa4.local. Spielt aber letztlich keine Rolle, da eine CA ja kein aktiv laufender Dienst ist, sondern nur per OpenSSL Zertifikate erzeugt werden. Es kann also jeder Rechner mit funktionierendem OpenSSL verwendet werden, egal ob Linux oder Windows.

Verzeichnisstruktur vorbereiten

Zunächst erstelle ich ein Verzeichnis, in welchem privater Schlüssel und Stamm-Zertifikat abgelegt werden und vergebe dafür restriktive Berechtigungen.

$ sudo mkdir -p /root/CA
$ sudo chmod 700 /root/CA

Privaten Schlüssel erstellen

Jetzt erstelle ich in diesem Verzeichnis den privaten Schlüssel. Sicherheitshalber wird dieser mit einem guten Passwort geschützt.

$ sudo openssl genrsa -aes256 -out /root/CA/fafa4-ca.key 4096
Generating RSA private key, 4096 bit long modulus
..............................................................................................................................................++
........................................................++
e is 65537 (0x10001)
Enter pass phrase for /root/CA/fafa4-ca.key:
Verifying - Enter pass phrase for /root/CA/fafa4-ca.key:

Auch dieser bekommt passende Zugriffsrechte.

$ sudo chmod 700 /root/CA/fafa4-ca.key

Stammzertifikat erstellen

Das Stammzertifikat dient dazu die Gültigkeit aller für unsere internen Server ausgestellten Zertifikate zu bestätigen. Wie jedes Zertifikat hat es ein Datum, an dem es ungültig wird. Ich wähle hier bewusst ein weit in der Zukunft liegendes Datum (25 Jahre, also 2044) , aber das ist natürlich Geschmackssache.

Zum Erstellen des Stammzertifikats benötige ich den eben erstellen privaten Schlüssel, zudem fragt openssl ein paar Informationen ab. Auch wenn diese (bis auf den Country Name) optional sind, fülle ich sie mit sinnvollen Werten.

$ sudo openssl req -new -nodes -x509 -extensions v3_ca -days 9129 -key /root/CA/fafa4-ca.key -out /root/CA/fafa4-ca.pem -sha512
Enter pass phrase for /root/CA/fafa4-ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Titz
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Fafa4 - coole Firma
Organizational Unit Name (eg, section) []:Administration
Common Name (e.g. server FQDN or YOUR name) []:Fafa4 - interne CA
Email Address []:xxxxxxxxxx@gluecksgriff-taschen.de

Unser /root/CA-Verzeichnis sieht jetzt also so aus:

$ sudo ls -lah /root/CA
insgesamt 16K
drwx------ 2 root root 4,0K Jan 11 14:04 .
drwx------ 4 root root 4,0K Jan 11 11:49 ..
-rwx------ 1 root root 3,3K Jan 11 12:09 fafa4-ca.key
-rw-r--r-- 1 root root 2,2K Jan 11 14:04 fafa4-ca.pem

So, das war auch schon alles. In Teil 2 bringe ich dann die Client-Rechner dazu dieses Zertifikat als vertrauenswürdige Stammzertifizierungsstelle zu akzeptieren.

3 Kommentare zu „Eigene CA betreiben – Schritt 1 (eigene CA erstellen)“

  1. Hallo,

    Schritt 1 kannte ich im wesentlichen schon, aber ich bin sehr gespannt auf Schritt 2. Da fehlt mir immer noch eine praktikable sprich automatisierbare Lösung. Ist da eine in Sicht oder hast du aufgegeben?

    Viele Grüße
    WaTho

    1. Hi WaTho,

      das läuft hier schon lange, aber mir fehlt im Moment einfach die Zeit das mal mit Kopf und leicht verständlich von diversen Zetteln, Textdateien und Screenshots hier reinzuhacken. Im Prinzip ist es aber ganz einfach (zumindest bei einem Windows AD), dem Domaincontroller wird die eigene CA als vertrauenswürdige Stammzertifizierungsstelle bekannt gemacht (Zertifikat der CA einfach mit Windows-Bordmitteln importieren) und anschließend per Gruppenrichtlinie an die Clients verteilt. Bei den Linux-Clients wird es per Script in ein Unterverzeichnis der bereits vorhandenen CA-Zertifikate importiert und anschließend mittels update-ca-certificates dem System bekannt gemacht.
      Viele Grüße
      Ralf

  2. Positivkonstruktiv

    Zum Glück verwendet diese Webseite CSS. Die Farben, die du hier verwendest sind grausig.
    Die Schrift kann man weder im Kommentarbereich noch in den Blöcken für die Konsole vernünftig lesen.
    Stelle mal deinen Monitor richtig ein, verwende am besten ein Farbprofil und dann ändere die Farben für deine Webseite. Ist ja furchtbar.
    PS: Falls du die Farben mit Javascript nachträglich anpassen solltest, ich verwende hier NoScript und ohne aktiviertem Javascript kann man obiges wie beschrieben nicht vernünftig lesen.

Kommentarfunktion geschlossen.