Sicheres Web-Login
Certification-Authority

DeveloperIT-ProjekteKomponentenSicherheitSoftwareWorkspace

Zertifikate

Sicheres Web-Login

Vor Passwortdiebstahl ist der Anwender auch im Web nicht sicher. Ein unverschlüsselt übertragenes Passwort gerät schnell in falsche Hände. Verantwortungsvolle Webmaster rüsten den Server daher mit einem Zertifikat aus, um die Identität des Webservers zu beweisen. Die Übertragung des Passworts erfolgt fortan verschlüsselt über den Secure- Socket-Layer (SSL). Um den Webserver Apache (www.apache.org) entsprechend auszustatten, eignet sich die Open- Source-Suite OpenSSL (www.openssl.org). Suse sowie die meisten anderen Distributionen enthalten das Open-SSL-Paket bereits. Suse bringt die Version 0.9.7d mit, die Sie über Yast/Software installieren oder löschen im System verankern. Das Paket enthält diverse Werkzeuge, um das SSL-Protokoll individuell zu konfigurieren. Das wichtigste Tool für den Einstieg ist das Perl-Skript »CA.pl«, das sich nach der Installation im Verzeichnis »/usr/share/ssl/misc/« befindet.

Certification-Authority erstellen
Da sich das Skript »CA.pl« nicht im Pfad befindet, kopieren Sie es als Benutzer »root« zuerst in ein neues Verzeichnis »openssl« im root-Homeverzeichnis »/root«. Wechseln Sie dazu in das »open ssl«-Verzeichnis.

cp /usr/share/ssl/misc/CA.pl ca

Nun lässt sich das Skript bequem ohne Pfadangabe aufrufen. Zu Beginn legen Sie mit Hilfe des Skripts eine Verzeichnis-Hierarchie unter »demoCA« an, in der später unter anderem das Schlüsselpaar der Certification- Authority liegt. Um das Verzeichnis zu erstellen und die Schlüssel zu generieren, benutzen Sie die Option »-newca«.

./ca -newca

Die Aufforderung des Skripts, einen Dateinamen für das Zertifikat anzugeben, lässt sich ignorieren. Bestätigen Sie stattdessen einfach mit [Enter]. Daraufhin produziert OpenSSL das Zertifikat und fertigt den privaten (geheimen) Schlüssel an. Dabei geht es nach den Informationen vor, die in der OpenSSL-Konfigurationsdatei »/usr/share/ssl/openssl.cnf« festgehalten sind. Für das Demozertifikat müssen Sie darin nicht ändern.

Signaturen

Sicheres Web-Login

Den privaten Schlüssel legt das Programm in »demoCA/private/cakey.pem« ab. Diesen müssen Sie anschließend mit einer Passphrase schützen. Beim Demozertifikat kommen Sie mit einem kurzen Satz aus. Erstellen Sie später ein produktives Zertifikat, sollten Sie sich für einen Satz mit mehreren Wörtern mit Großbuchstaben und eventuell sogar Zahlen entscheiden. Bei der Eingabe der Passphrase gibt OpenSSL kein Echo aus. Der Anwender sieht also nicht einmal Sternchen, die die Anzahl der tatsächlichen Zeichen repräsentieren.
Nachdem Sie die Passphrase noch einmal bestätigt haben, füllen Sie das Zertifikat mit Informationen, beispielsweise den Unternehmensnamen und der E-Mailadresse des verantwortlichen Ausstellers. Dieser sollte auch wirklich als Ansprechpartner fungieren und nicht nur als Platzhalter dienen.

Zertifikatinhalt ausgeben
Sobald das Skript durchgelaufen ist, befinden sich der geheime Schlüssel »cakey. pem« sowie das signierte Certification- Authority-Zertifikat »cacert.pem« im Verzeichnis »demoCA«. Die Dateien liegen in dem speziellen Format »PEM: ASN1 DER« vor, sind mit per DES3 verschlüsselt und MIME-base64 kodiert. Um die im Zertifikat gespeicherten Informationen anzuzeigen, benutzen Sie »openssl«:

openssl x509 -text -noout -in
demoCA/cacert.pem

Der Befehl fördert neben den vorher eingegebenen Daten auch die Gültigkeitsdauer sowie den Signature-Alghoritmus zu Tage, hier »md5WithRSAEncryption«. Auch die Datei, die den geheimen Schlüssel enthält, lässt sich dekodieren. Allerdings enthält diese keine brauchbaren Informationen:

openssl rsa -text -noout -in
demoCA/private/cakey.pem

Um die Datei zu entschlüsseln, müssen Sie noch die Passphrase eingeben.

Server mit Zertifikat ausstatten

Sicheres Web-Login

Da die Certification-Authority nun konfiguriert ist, lassen sich Schlüssel für die Server generieren. Mit Hilfe dieser Schlüssel fertigen Sie dann die Zertifikate an. Die ganze Prozedur läuft in drei Schritten ab. Zuerst generieren Sie ein Schlüsselpaar mit einem privaten (geheimen) und einem öffentlichen Schlüssel (private/public) sowie einen Certificate- Request. Dieser besteht aus dem öffentlichen Schlüssel des Servers und einigen weiteren Informationen. Danach unterschreiben Sie den Certificate-Request mit dem Certificate-Authority-Schlüssel. Zum Schluss statten Sie den Server mit dem unterschriebenen Zertifikat und den Schlüsseln aus. Legen Sie unter »openssl« zuerst ein Verzeichnis an, in das Sie alle einem Server zugeordneten Dateien speichern, zum Beispiel »apache1«. Der Apache-Webserver erwartet für den privaten Schlüssel die Datei »server.key« und für das Zertifikat »server.crt«. Um das Zertifikat anzulegen und zu nutzen, benötigt Apache das Modul »mod_ssl«, das Sie installieren und »httpd.conf« frei schalten müssen.

Die Schlüssel
Erstellen Sie nun das Schlüsselpaar. Hier können Sie wählen, ob der private Schlüssel verschlüsselt sein soll. Der Vorteil liegt darin, dass ein Dieb nichts mit dem Schlüssel anfangen kann, etwa unter Ihrem Namen auftreten. Allerdings müssen Sie bei einem verschlüsselten Private- Key die Passphrase angeben, die der Server beim Start abfragt. Entscheiden Sie sich für die unverschlüsselte Variante, fährt der Server ohne Abfrage hoch. Um den privaten Schlüssel zu erzeugen und per DES3 zu verschlüsseln, verwenden Sie:

openssl genrsa -des3 -out
apache1/server.key 1024

Beachten Sie, dass »apache1« unser Beispielverzeichnis ist. OpenSSL fertigt einen 1024 Bit langen Schlüssel an und fordert danach zur Eingabe der Passphrase auf. Für eine unverschlüsselte Version verzichten Sie auf die Option »-des3«.

Certificate-Requests

Sicheres Web-Login

Request unterschreiben
Beim Anlegen des Certificate-Requests geben Sie im Wesentlichen dieselben Informationen an wie beim Certification- Autority-Zertifikat. Einzig der »Common Name« ist neu.
Hier geben Sie den vollen Namen des Webservers inklusive Domain an, den so genannten Fully-Qualified-Domain-Name (FQDN). Falls Sie sich vorher für den verschlüsselten Private-Key entscheiden haben, müssen Sie außerdem die Passphrase parat haben.

openssl -req -new -key
apache1/server.key -out newreq.pem

Der Befehl produziert den Certification- Request und legt diesen in der Datei »newreq.pem« ab. Nun signieren Sie den Request mit dem Schlüssel aus der Datei »server.key«. Wechseln Sie dazu in das anfangs angelegte »openssl«-Verzeichnis und benutzen Sie das Skript für die Unterzeichnung.

./ca -sign

Nachdem Sie die Passphrase eingegeben haben, prüft das Skript die Signatur und gibt die im Zertifikat enthaltenen Informationen aus. Um das Zertifikat zu signieren, bestätigen Sie nach Aufforderung mit »y«. Danach kopieren Sie das unterschriebene Zertifikat »newcert.pem« mit dem Dateinamen »server.crt« in das »apache1 «-Verzeichnis:

cp newcert.pem apache1/server.crt

Damit der Webserver das Zertifikat nutzen kann, kopieren Sie es zusammen mit der Schlüsseldatei in das »echte« Apache- Verzeichnis. Das Zertifikat »server. crt« kommt in das Verzeichnis »/etc/httpd/ conf/ssl.crt/« und die Datei mit dem privaten Schlüssel »server.key« nach »/etc/ httpd/conf/ssl.key«. Damit der Webserver die Dateien findet, setzten Sie die Pfade in der »httpd.conf« entsprechend: SSLCertificateFile

/etc/httpd/conf/ssl.crt/server.crt

SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key

CA-Zertifikat verteilen

Sicheres Web-Login

Die Konfiguration ist somit weitgehen
d abgeschlossen. Die Clients kommunizieren jetzt bereits per SSL mit dem Server. Allerdings gilt es nun noch, ein für die Benutzer nerviges Detail abzustellen. Da der Browser die ausstellende CA nicht kennt, fordert er den Benutzer jedes Mal erneut auf, das Zertifikat zu akzeptieren. Dies stellen Sie ab, indem Sie eine Kopie des CA-Zertifikats auf dem Server bereitstellen, das die Browser herunterladen und installieren können.
Der Webserver Apache verteilt das CA-Zertifikat als DER-kodierte Datei mit dem MIME-Typ »application/x-x509-cacertc. Dies fügen Sie als Direktive in die Konfigurationsdatei »httpd.conf« ein:

AddType application/x-509-ca-cert.crt

Der Webserver liefert dann Dateien mit der Endung ».crt« entsprechend aus. Nun müssen Sie mit »openssl« nur noch eine passende »DER«-Datei generieren:

openssl x509 -in demoCA/cacert.pem -outform DER -out ca-rsa.crt

Kopieren Sie die Datei »ca-rsa.crt« noch in das Arbeitsverzeichnis des Webservers. Damit ist die Konfiguration entgültig abgeschlossen. Die Gültigkeitsdauer des CA-Zertifikats ist im Skript »CA.pl« standardmäßig auf 365 Tage eingestellt. Möchten Sie dies ändern, tragen Sie den neuen Wert direkt im Skript ein:

$DAYS=”-days 365″;

Suchen Sie die obige Zeile und ersetzten Sie die 365 durch eine neue Zahl. Jeder Wert ist gültig. Guten Gewissens können Sie ein CA-Zertifikat ruhig für mehrere Jahre ausstellen.

Lesen Sie auch :
Autor: swasi