Vollbildmodus: Seiteninhalt ohne Menus

SSL-Verschlüsselung in Apache2 (openssl)

Bei Webservern wie Apache(2) mit wird SSL oder TLS die Hybride Verschlüsselung zur Absicherung des Datenverkehrs eingesetzt.

TIP: Buch Apache Webserver2 ab S.627 (ISBN: 3827321182 bzw. ISBN: 3827325668)

:!: namensbasierte virtuelle Server sind in Verbindung mit SSL nur sehr eingeschränkt möglich (Zertifikat gilt dann nur für einen der virt. Server). Es muss eine eigene IP pro SSL-geschützter Seite existieren. Der Grund ist das die passende IP Teil des HTTP-Request ist, der nur mit dem passenden Host-Schlüssel entschlüsselt werden kann. Da aber der passende Host erst anhand des HTTP-Request ermittelt wird, kann es an dieser Stelle zu keiner Verifizierung kommen.

Siehe auch: Man-in-the-middle Attacken gegen SSL.

SSL-Zertifikat (für eine Zertifizierungsstelle) erstellen

Schritt 1: Zertifizierungsanforderung (CSR) erstellen

Die Anleitung ist für Apache und mod_ssl gedacht.

Eine Zertifizierungsanforderung (CSR) ist eine Datei, die die Antragsdaten sowie den öffentlichen Schlüssel enthält. Der private Schlüssel bleibt auf dem Server (hoffentlich) geheim und kann auch mit einer Passphrase geschützt werden, in diesem Fall muss man allerdings bei Neustart des Webservers immer die Passphrase angeben (sonst startet der Webserver nicht).

  1. Erstellen der CSR-Datei:

Dazu erstellen wir ein Schlüsselpaar bestehend aus privatem Schlüssel und öffentlicher Zertifizierungsanforderung (CSR). Entweder mit 1024 Bit:

openssl req -new -nodes -keyout dateiname.key -out dateiname.csr

oder mit 2048 Bit Schlüssellänge:

openssl req -new -nodes -keyout dateiname.key -out dateiname.csr -newkey rsa:2048

.

Es bietet sich an den Dateinamen so zu wählen, daß man ihn später eindeutig der Webseite zuordnen kann.

Der Befehl erzeugt also zwei Dateien:

  1. Die Datei mit der Endung key enthält den privaten Schlüssel, geben Sie diese Datei daher nicht an Fremde weiter. Bitte erstellen Sie auf jeden Fall ein Backup Ihres privaten Schlüssels, da es keine Möglichkeit der Wiederherstellung nach einem Verlust gibt. Der private Schlüssel dient als Grundlage der Zertifizierungsanforderung (CSR) und damit auch als Grundlage des Zertifikates.
  2. Die Datei mit der Endung csr ist die Zertifikatsanforderung (enthält den öffentlichen Schlüssel)

Bei der Erstellung der Zertifizierungsanforderung werden Sie nach einigen Details gefragt, die neben dem öffentlichen Schlüssel in den CSR-Datei aufgenommen werden und diesen eindeutig machen. Einige Felder sind optional (unwichtige Felder) und haben einen Standardwert (diesen kann man mit der Eingabetaste übernehmen oder man gibt Sie einen Punkt (.) ein, wenn dieses Feld leer bleiben soll)

Country Name (2 letter code) [AU]: DE

hier das Länderkürzel eingeben, z.B. DE

State or Province Name (full name) [Some-State]: Berlin

hier das Bundesland eingeben, z.B. Berlin

Locality Name (eg, city) []: Berlin

hier den Ort eingeben

Organization Name (eg, company) [Internet Widgits Pty Ltd]: FIRMENNAME

hier den Firmennamen / Organisationsnamen / Vor- und Zunamen ein, je nachdem, was passt

Organizational Unit Name (eg, section) []: IT

hier kann man eine Abteilung eingeben, dieses Feld kann aber auch leer bleiben

Common Name (eg, YOUR name) []: www.DOMAIN.de

:!: hier muss die geschützte Seite mit vollständigem Domainnamen enthalten sein. Also z.B.

www.DOMAIN.de

. Das im Browser vorangestellte https:// wird nicht angegeben. Genauso sind Unterverzeichnisse und einzelne Dateien bereits enthalten und werden nicht angegeben.

Email Address []: info@domain.de

hier gibt man seine E-Mail-Adresse ein

Gegebenenfalls werden Sie nach folgenden 'extra'-Angaben gefragt

A challenge password []: An optional company name []:

bitte immer leer lassen. Die Zertifikatsanfrage wurde nun erstellt. Jetzt muss man nur noch dateiname.csr in einem Editor öffnen und in die Zwischenablage kopieren (z.B. mit cat dateiname.csr) und den Inhalt in das vorgesehene Feld im Bestellprozess kopieren. Das sieht dann in etwa so aus:

-----BEGIN CERTIFICATE REQUEST-----
(Zeichensalat)
-----END CERTIFICATE REQUEST-----

Damit verschickt man die Zertifikatsanfrage an den Zertifikatsaussteller der dann das eigentliche Zertifikat ausstellt.

:!: Vom privaten Schlüssel (dateiname.key) unbedingt ein Backup erzeugen, bei Verlust oder Diebstahl ist das Zertifikat nicht mehr sicher und damit wertlos.

Schritt 2: installieren in Apache

Nun kopiert man die Dateien in einen Pfad (hier /etc/apache2/) und konfiguriert

<VirtualHost IP:443>

DocumentRoot /srv/www
SSLEngine On
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key

</VirtualHost>

:!: Andere Webserver werden auf der Seite “Technical Support - Install SSL Certificate“ behandelt.

Ein selbst signiertes (self-signed) Zertifikat erstellen

Ein selbst signiertes Zertifikat ist schnell erstellt und bietet auch sichere Verschlüsselung.

openssl genrsa -out server.key -des3 1024

Passphrase eingeben, der private Schlüssel ist dann in server.key.

openssl req -new -x509 -days 1460 -key server.key -out server.crt

Common Name sollte auf den Servernamen lauten, sonst gibt es noch eine zusätzliche Fehlermeldung beim Benutzer

Allerdings ist der große Nachteil, das der Benutzer 2 Fehlermeldungen sieht:

  1. weil die Seite kein Zertifikat von einer anerkannten Zertifizierungsstelle (CA) hat und
  2. nicht authentifiziert werden kann („Der Aussteller des Zertfikates kann nicht identifiziert/verifiziert werden o.ä.).

Die zwei nervigen Meldungen mögen für private Seiten ok sein, für Unternehmensseiten geht es definitiv nicht. Der Grund ist das die Benutzer von der Fehlermeldung abgeschreckt werden und der demonstrierte Geiz auch kein gutes Licht auf die Firma wirft.

Passphrase entfernen

Wenn der private Schlüssel eine Passphrase hat muss bei jedem Neustart des Webservers die Passphrase eingegeben werden! Deshalb ist es oft gewünscht die Passphrase zu entfernen:

openssl rsa -in /etc/apache2/server.key -out /etc/apache2/server_neu.key

Links

Konfiguration für SSL

  • das SSL-Modul aktivieren:
a2enmod ssl
  • überprüfen ob Apache auf Port 443 lauscht (Direktive „Listen 443“)
  • Konfiguration der virt. Host anpassen:
SSLEngine On
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/DATEI.crt
SSLCertificateKeyFile /etc/apache2/DATEI.key
  • den Schlüsseldateien chmod 600 zuweisen (chown root)
 
apache/ssl.txt · Zuletzt geändert: 2009/03/23 22:57 von st
 
Backlinks: [[apache:ssl]]