E-Mail-Verschlüsselung bedeutet, dass man sich mit Zertifikaten herumschlagen muss. Und Zertifikate bedeuten, dass man eine Certificate Authority (CA) benötigt, welche Zertifikate ausstellt. Das frei verfügbare openssl (http://www.openssl.org/) bringt alles mit, was man für den Aufbau und den Betrieb einer CA benötigt.
Allerdings besteht eine CA nur zu einem Teil aus der Technik. Essentieller Bestandteil einer CA sind organisatorischer und betrieblicher Natur. Die wohl beste deutschsprachige Referenz für den Betrieb einer CA ist das Handbuch Aufbau und Betrieb einer Zertifizierungsinstanz (pdf, 1.6 MB) des Deutschen Forschungsnetzwerks (http://www.dfn-pca.de/).
Wichtige Begriffe
Eine Public Key Infrastruktur (PKI) ist das Vehikel, welches mit Hilfe einer CA betrieben wird. Es basiert auf Public/Private Key Kryptographie; jedes Objekt (etwa ein Server, oder eine Person) hat einen privaten, geheim zu haltenden Schlüssel, und ein dazu passendes öffentliches Schloss. Details finden sich zum Beispiel bei Wikipedia.
X.509 ist ein Standard für Zertifikate, wie er zum Beispiel für SSL-Verbindungen verwendet wird – bekannt aus dem “S” in “HTTPS”. Wiederum finden sich Details bei Wikipedia.
Pretty Good Privacy (PGP) ist konzeptionell in vielen Bereichen ähnlich wie X.509, aber natürlich sind die zwei Standards technisch und organisatorisch verschieden. PGP wird vor allem für die Verschlüsselung von Inhalten verwendet. Viele der Unterschiede zwischen PGP und X.509 sind allerdings eher philosophischer und politischer Natur. PGP hat eine wechselvolle Geschichte hinter sich, die wiederum in Wikipedia nachgelesen werden kann. In dieser Artikelserie werden wir PGP erst bei den User-Zertifikaten anschauen, da PGP für die Verschlüsselung zwischen Servern wenig Verbreitung gefunden hat.
Aufbau einer CA/PKI
Für den Aufbau einer CA verwenden wir im folgenden einen Linux-Server und openssl. Die Sicherheit der CA selbst ist für den sicheren Betrieb der PKI ausschlaggebend. Das ganze sollte also idealerweise auf einem entsprechend gut gesicherten System erfolgen. Gewisse Aufgaben sollten auf einem nicht an das Netzwerk angeschlossenen System erledigt werden, insbesondere die Handhabung der Root-Zertifikate.
Das Root-Zertifikat ist die Wurzel des PKI-Baumes. Alle von einer CA ausgegebenen Zertifikate hängen direkt oder indirekt von diesem Zertifikat ab. Die zwei Teile des Root-Zertifikats (privater und öffentlicher Schlüssel) sollten daher entsprechend sorgfältig behandelt werden.
Sinnvollerweise wird man für verschiedene Zwecke unterschiedliche CA-Zertifikate einsetzen; in unserem Fall wählen wir je ein CA-Zertifikat für die Ausstellung von Maschinen- und Personenzertifikaten. Damit ergibt sich die folgende Zertifikatshierarchie:
- Server-CA-Zertifikat
- Zertifikat für Server 1
- ...
- Zertifikat für Server n
- User-CA-Zertifikat
- Zertifikat für User 1
- ...
- Zertifikat für User n
Vorbereitung der CA
Jetzt können wir unsere CA vorbereiten. Dazu benötigen wir einen User, eine Verzeichnisstruktur und einige Textdateien:
- User “ca”, Gruppe “ca”
/home/ca gehört ca:ca, Zugriffsrechte 750 (dh “others” dürfen nicht zugreifen)
- Das Verzeichnis
/home/ca/base (ca:ca, 750) wird alle CA-relevanten Dateien enthalten
/home/ca/base enthält die folgenden Verzeichnisse
cacerts/ – für die Server- und User-CA-Zertifikate
srvcerts/ – für die erzeugten Server-Zertifikate
usrcerts/ – für die erzeugten User-Zertifikate
conf/ – verschiedene openssl Konfigurationsdateien
/home/ca/base enthält die folgenden Dateien als Startpunkt:
echo "01" > serial – Zähler für die Seriennummer in den Zertifikaten
touch index – “Datenbank” der erstellten Zertifikate
Download der Verzeichnisstruktur und der Konfigurationsdateien
Sobald die Server- und User-CA-Zertifikate erstellt sind, sollten die Zugriffsrechte auf die Dateien im Verzeichnis cacerts/ entsprechend angepasst werden (read-only), damit die Zertifikate nicht aus Versehen überschrieben werden.
Hinweis: Im Konfigurationsverzeichnis befinden sich drei Dateien. Im Prinzip könnte die Konfiguration auch in einer Datei zusammengefasst werden; die Aufteilung erleichtert aber den Überblick ein wenig.
.h3 CA-Zertifikate erzeugen
Nun können wir die privaten Schlüssel für unsere CA-Zertifikate erstellen (sofern nichts anderes angegeben, starten alle Befehle in /home/ca/base/):
openssl genrsa -aes256 -out cacerts/srv.key.pem 2048
openssl genrsa -aes256 -out cacerts/usr.key.pem 2048
openssl fragt nach der Passphrase für den privaten Schlüssel – das ist eigentlich ein Passwort, mit welchem der private Schlüssel geschützt wird.
Anschliessend erstellen wir aus diesen Schlüsseln die Zertifikate und lassen sie anzeigen:
openssl req -config conf/srv-ca.cnf -new -x509 -days 1095 -key cacerts/srv.key.pem -out cacerts/srv.cert.pem
openssl req -config conf/usr-ca.cnf -new -x509 -days 1095 -key cacerts/usr.key.pem -out cacerts/usr.cert.pem
openssl x509 -in cacerts/srv.cert.pem -text
openssl x509 -in cacerts/ca.leisi.net.srv-cert.pem -noout -purpose
Damit haben wir die zwei Zertifikate (cacert/*.cert.pem), welche wir jetzt zum Beispiel in Firefox und Thunderbird als “Authorities” importieren können.