Zertifikat und Autorisierung (CA)
Willemers Informatik-Ecke
Zertifikate werden besonders bei der sicheren Verbindung zu einem per HTTPS gesicherten Webserver verwendet. Dabei benötigt man die Zertifikate für zwei Aufgaben:

Verschlüsselung über das Zertifikat

Der Server sendet dem Client, also dem Browser, bei Verbindungsaufnahme ein Zertifikat, das im Grunde ein öffentlicher Schlüssel ist.

Zertifizierung der Zertifikate

Damit der Client die Echtheit des Zertifikats prüfen kann, müsste er jedes Zertifikat eines Webservers weltweit mit sich führen. Das ist nicht machbar.

Wie bei einem Personalausweis, der durch den Stempel des Ausstellerlandes autorisiert wird, geht man bei Zertifikaten vor. Es gibt es Zertifikatsautorisierungsstellen (CA - Certificat Authority), die Zertifikate quasi zertifizieren.

Dazu sendet man sein Zertifikat an die CA, die mit ihrem privaten Schlüssel das Zertifikat autorisiert. Parallel macht die CA-Stelle ihren öffentlichen Schlüssel verfügbar. Beispielsweise enthält ein Browser bereits eine Bibliothek der relevanten CA-Stellen. Zeigt der öffentliche CA-Schlüssel, dass das Zertifikat von einer bekannten CA-Stelle autorisiert wurde, kann der Client das Zertifikat bedenkenlos verwenden.

Das CA-Zertifikat wird nicht zur Verschlüsselung verwendet, sondern um das Zertifikat zu autorisieren, das zur Verschlüsselung verwendet wird. Wenn die CA also betrügerisch wäre, käme sie dennoch nicht an die verschlüsselten Daten.

Für das eigene Netzwerk kann man das CA-Zertifikat auch selbst erstellen. Das ist bei Intranet-Anwendungen durchaus sinnvoll, weil die meisten Browser auf Zertifikate ohne bekannte CA sehr aufgeregt reagieren, was sich leicht auf die Anwender überträgt, die mit Warnungen überhäuft werden.

Asymmetrische Verschlüsselung: public und private

Bei der asymmetrischen Verschlüsselung werden zwei Arten von Schlüsseln verwendet. Was der eine Schlüssel verschlüsselt, kann nur der andere Schlüssel entschlüsseln.

Einer der beiden Schlüssel wird geheim gehalten. Man bezeichnet ihn als den privaten Schlüssel.

Dagegen wird der andere Schlüssel hemmungslos veröffentlicht. Jeder kann und soll ihn sogar besitzen.

Verschlüsselt man eine Nachricht mit dem public Key, kann nur der Besitzer des private Keys die Nachricht entschlüsseln. Damit lässt sich eine Nachricht verschlüsseln, die nur von einem Empfänger gelesen werden kann, nämlich dem Besitzer des privaten Schlüssels.

Verschlüsselt der Besitzer des privaten Schlüssels damit eine beliebige Zeichenfolge, weiß jeder mit Zugriff auf den öffentlichen Schlüssel, dass der Absender der Besitzer des privaten Schlüssels ist. Auf diese Weise kann der Besitzer des privaten Schlüssels seine Identität beweisen.

Anlegen eines CA-Zertifikats

Wir wollen für eine Intranet-Lösung ein eigenes CA-Zertifikat erstellen, das später das eigentliche Zertifikat bestätigen soll.

Ein Zertifikat ist asymmetrisch, besteht also aus einem privaten und einem öffentlichen Teil. Zunächst soll der private Schlüssel, der auch als Key bezeichnet wird, erstellt werden.

openssl genrsa -aes256 -out ca-priv.pem 2048
Bei der Erzeugung muss eine Passphrase eingegeben werden. Auf diese Weise wird verhindert, dass allein der Besitz des Zertifikats ausreicht, um davon Zertifikate zu erzeugen.

Im nächsten Schritt wird der öffentliche Teil des CA-Zertifikats erstellt. Dieser muss den privaten Key über die Option -key aufnehmen. Der Befehl lautet:

openssl req -x509 -new -nodes -key ca-priv.pem -out ca-pub.pem -sha512
Zunächst muss die Passphrase angegeben werden, die soeben bei der Erstellung des privaten Keys festgelegt wurde. Anschließend müssen folgende Parameter für das öffentliche CA-Zertifikat eingegeben werden: Die Datei ca-pub.pem wird an die Browser verteilt. Beim Firefox wird das über die drei waagerechten Striche, die neuerdings ein Menü darstellen sollen und dann über folgende Schritte eingefügt. Dann geht es weiter mit:
  1. Einstellungen|Erweitert|Zertifikate
  2. Dort wählen Sie den Button Zertifikate anzeigen.
  3. Klicken Sie auf den Reiter Zertifizierungsstellen.
  4. Dort wählen Sie den Button Importieren. In der nun erscheinenden Dateiauswahlbox können Sie die Datei auswählen.

Erzeugen eines Zertifikats

Auch für das Zertifikat muss zunächst ein privater Key erzeugt werden.
openssl genrsa -out zertifikat-priv.pem 4096
Der private Key wird als Eingabedatei für den öffentlischen Teil des Zertifikats herangezogen:
openssl req -new -key zertifikat-priv.pem -out zertifikat.csr -sha512
Auch hier werden die Eingaben von oben verwendet. Dieses Mal beziehen sie sich allerdings auf das Zertifikat und nicht die Zertifizierungsstelle. Wichtig ist hier der Common Name, da dieser der URL entsprechen muss, die später aufgerufen werden soll.

Des weiteren wird der Anwender nach einem »challenge password« und einem »company name&laro;. Dies kann leer gelassen werden, wird ansonsten für den Widerruf des Zertifikats benötigt.

Legitimieren des Zertifikats durch die CA

Aus der so entstandenen Datei zertifikat.csr kann unter Zuhilfenahme des CA-Zertifikats und natürlich der Passphrase nun der öffentlichen Teil des Zertifikats erzeugt werden. Dazu verwenden Sie den folgenden Befehl:
openssl x509 -req -in zertifikat.csr -sha512 -CA ca-pub.pem -CAkey ca-priv.pem -CAcreateserial -out zertifikat-pub.pem
Damit entsteht nun die öffentliche Zertifikatsdatei. Diese muss beim Webserver hinterlegt werden.

In einigen Fällen kann die Meldung »unable to write 'random state'« erscheinen. Diese Situation entsteht, wenn die Datei .rnd im Heimatverzeichnis nicht dem Benutzer gehört. Es lässt sich leicht durch den folgenden Befehl bereinigen:
rm -r ~/.rnd
Anschließend den openssl-Befehl noch einmal aufrufen.

Bei einigen Webservern kann der öffentliche CA-Schlüssel nicht separat eingebunden werden. In diesen Fällen ist es möglich, den öffentlichen CA-Schlüssel direkt an das öffentliche Zertifikat anzuhängen. Das funktioniert mit einem einfachen Linux-Standardbefehl:

cat ca-pub.pem >> zertifikat-pub.pem

Für die Einbindung des Zertifikats in Apache benötigen Sie die öffentliche und die private Zertifikatsdatei und die öffentliche CA-Datei.

Siehe auch:

Ablage der Zertifikatsstellen im Browser

Damit der Browser ein Zertifikat akzeptiert, muss der öffentliche Schlüssel der CA hinterlegt sein. Wenn Sie für den netzwerkinternen Bedarf ein Zertifikat erstellen und dieses von den Arbeitsplätzen akzeptiert werden soll, können Sie den Schlüssel der eigenen CA dort im Browser hinterlegen. Für Firefox ergeben sich folgende Schritte: