Eigene CA betreiben

Damit X.509-Zertifikate (SSL, TLS) gültig sind, müssen sie von einer CA (Certificate Authority) zertifiziert ("unterzeichnet") werden. Es gibt natürlich viele kommerzielle CAs (z.B. Verisign), die aber recht viel kosten. Für den Hausgebrauch kann man sich daher eigene Zertifikate erstellen.

Hinweis: Wer kostenlose SSL-Zertifikate für öffentliche Rechner brauchte, sollte bitte KEINE eigene CA aufsetzen, sondern CAcert verwenden! Diese Anleitung existiert nur, damit Rechner in einem internen Netz mit ungültigen Domainnamen (*.example, *.invalid) auch mit SSL-Zertifikaten versorgt werden können, da CAcert dafür keine Zertifikate erteilt!

Warnung: Diese Anleitung dient nur zu Testzwecken! Insbesondere wird nicht auf die Absicherung der hochgeheimen CA-Daten eingegangen.

CA erstellen

Folgende Verzeichnisstruktur muss erzeugt werden:

/home/myuser/myCA
    |
    |- crl
    |- newcerts
    |- private

Die zentrale Datenbank index.txt muss erst erzeugt werden:

touch index.txt

Außerdem muss noch die Datenbank mit den vergebenen Seriennummern initialisiert werden.

echo "01" > serial

Die Datei openssl.cnf in das Verzeichnis kopieren (bei Fedora in /etc/pki/tls/openssl.cnf zu finden, vor FC5 unter /usr/share/ssl/openssl.cnf) und nach eigenem Gusto anpassen.

(...)
HOME                    = /home/myuser/myCA
RANDFILE                = $HOME/.rnd
(...)
[ CA_default ]
dir                     = $HOME                 # Where everything is kept
(...)

Dabei kann man auch gleich die Gültigkeitsdauer eines Zertifikats anpassen, z.B. auf fünf Jahre (Standard ist ein Jahr):

default_days    = 1825                  # how long to certify for

Zum Abschluss muss noch der supergeheime private key der eigenen CA erzeugt werden:

openssl req -config openssl.cnf -new -x509 -extensions v3_ca \
        -keyout private/cakey.pem -out cacert.pem -days 7300

Zertifikate generieren

Siehe SSL/X.509-Zertifikate generieren

Zertifikate zertifizieren

openssl ca -config openssl.cnf -policy policy_anything -out domain.crt -infiles domain.csr

In domain.crt findet sich anschließend das signierte Zertifikat.

Grundsätzliches zu openssl und CA-Management

Die CA-Implementierung in openssl sollte eigentlich nur als Beispiel für eine CA-Implementierung dienen.

$ man 1 ca
(...)
WARNINGS
    (...)
    The ca utility was originally meant as an example of how to do things
    in a CA. It was not supposed to be used as a full blown CA itself:
    nevertheless some people are using it for this purpose.
    (...)

Daher kann es Probleme im realen Betrieb einer CA mit Hilfe der openssl-Implementierung geben. Um diese Klippen zu umschiffen, eignen sich kommerzielle PKI-Produkte oder Open-Source-Lösungen wie OpenCA oder dessen sehr aktiver Fork OpenXPKI. Oftmals ist auch CAcert sehr geeignet, dort gibt es z.B. auch einen speziellen Modus für Unternehmen, die ihre Zertifikate dort über mehrere Benutzerzugänge verwalten können und so unabhängig von einzelnen Administratoren sind.