AA_sperrung_sxc1003255_AdrianVanLeen.jpg

© Adrian van Leen, sxc.hu

Geschlossene Gesellschaft

SSL-Authentifizierung mit Apache

21.07.2011
Das Login auf Webseiten mittels Nutzernamen und Passwort birgt Gefahren. Für mehr Sicherheit sorgt der Apache-Webserver mit einer zertifikatsbasierten Anmeldung.

Foren, Blogs oder Content-Management-Systeme besitzen meist eigene Authentifizierungssysteme. Doch auch der Webserver selbst erlaubt die Zugangskontrolle – fast jeder Anwender sah die so genannte .htaccess-Abfrage (Abbildung 1) schon einmal. In jüngerer Zeit hält zudem das OpenID-Verfahren Einzug, bei dem eine einzige Kennung als eine Art Single-Sign-On den Zugriff auf verschiedene Seiten öffnet. All diese Möglichkeiten verbindet, dass sie lediglich zwei Daten abfragen: Benutzername und Passwort. Gelangen diese Informationen in die falschen Hände, stehen Dritten alle Türen offen.

Abbildung 1: Der klassischen Anmeldung per .htaccess haftet ein Makel an: Geraten die Login-Daten in falsche Hände, stehen jedem Tür und Tor offen.

Als wesentlich sicherer erweist sich die Authentifizierung per Zertifikat: Sie überträgt beim Anmelden kein Passwort, sondern einen Schlüssel, der als Datei auf Ihrer Festplatte liegt. Diese Datei wiederum schützt ein Kennwort, sodass ein potentieller Angreifer nicht nur den Schlüssel, sondern auch das geheime Passwort benötigt. Dieses ändern Sie bei Bedarf jederzeit problemlos. Erscheint auch das noch zu riskant, speichern Sie das Zertifikat auf einem so genannten USB-Token oder einer Smartcard.

Viele Anwender kennen dieses Prinzip der zertifikatsbasierten Authentifizierung schon von der E-Mail-Verschlüsselung, denn sowohl PGP als auch S/MIME funktionieren mit passwortgeschützten Schlüsseln. Wer viele Server administriert, verwendet in den meisten Fällen zur Anmeldung via SSH ebenfalls die zertifikatsbasierte Anmeldung, die einen Key anstelle eines Passworts überträgt.

Schlüssel, Zertifikate, Zertifizierungsstelle – das klingt zunächst kompliziert, bietet aber handfeste Vorteile. Zum einen stellt die Notwendigkeit des Zertifikats oder der Zugriff auf die Smartcard ein weitaus größeres Hindernis für Angreifer dar als eine Passwortabfrage. Zum anderen stellen viele Unternehmen ohnehin Zertifikate für Ihre Mitarbeiter aus. Desweiteren lassen diese sich viel komfortabler zentral verwalten als simple Passwörter, da sie von Hause aus Gültigkeitsdauern und Sperrlisten unterstützten.

Allerdings bringt diese Art der Authentifizierung auch Nachteile mit sich: Mal eben vom PC des Kollegen am Server einloggen funktioniert genauso wenig wie der Zugriff auf wichtige Daten, wenn der Schlüssel durch einen Absturz verloren ging. Auch eignet sich ein solcher Schutz nur dann, wenn jeder Mitarbeiter einen entsprechenden Schlüssel erhält. Aber gerade weil diese Methode das Login nicht "mal eben" von jedem Gerät aus ermöglicht, trägt sie maßgeblich zur Sicherheit bei.

Grundverschlüsselung

Das Testsystem besteht sowohl auf dem Client als auch dem Server aus Ubuntu 10.10. Als Webserver kommt Apache aus den Ubuntu-Paketquellen zum Einsatz, als Browser Firefox 4.0 direkt von Mozilla [1]. Apache installieren Sie mittels

# apt-get install apache2-suexec apache2-mpm-prefork

Nach der Installation aktivieren Sie das SSL-Modul mit dem Kommandozeilenbefehl sudo a2enmod ssl. Zum Aktivieren von SNI (siehe Kasten "Was ist SNI?") fügen Sie in die Datei /etc/apache2/ports.conf den Eintrag NameVirtualHost *:443 unter der bereits vorhandenen Zeile ein, und starten Apache abschließend mit der Eingabe von sudo /etc/init.d/apache2 reload neu.

Was ist SNI?

SNI steht für Server Name Indication und löst ein seit Jahren bestehendes SSL-Problem. Bislang war Apache lediglich in der Lage, pro IP-Adresse genau eine Domain verschlüsselt zu betreiben. Bei SNI sendet der Browser vorher die gewünschte Adresse unverschlüsselt, was den Einsatz mehrerer SSL-Domains pro IP-Adresse ermöglicht. Gerade in Zeiten der IPv4-Adressknappheit ist das äußerst hilfreich. Sowohl die neueren Versionen von Apache (ab Ubuntu 10.04) als auch Firefox 4.0 unterstützen SNI. Die häufig anzutreffende Kombination Windows XP / Internet Explorer, gleich welcher Version, beherrscht SNI hingegen nicht.

Der Webserver muss bereits in der Lage sein, verschlüsselte Seiten auszuliefern, bevor er auch Zertifikate zur Anmeldung akzeptiert. Richten Sie deswegen zunächst eine gewöhnliche SSL-verschlüsselte Seite ein und stellen Sie sicher, dass diese funktioniert. Erst danach fügen Sie die Authentifizierung hinzu. Fehlt die virtuelle Seite, holen Sie das mit den folgenden Schritten nach:

  • Legen Sie im Ordner /etc/apache2/sites-available/vhost.dmn.tld eine Datei mit dem Inhalt von Listing 1 ab. Diese beschreibt den virtuellen Host und kommt auch später zur Konfiguration der Authentifizierung zum Einsatz. Statt vhost.dmn.tld benutzen Sie den Namen der Seite. Setzen Sie ein so genanntes Chained SSL Certificate ein, ergänzen Sie das noch um die Zeile SSLCertificateChainFile /etc/ssl/certs/vhost.dmn.tld.chain
  • Erstellen Sie mittels mkdir -p /var/www/sites/vhost.dmn.tld ein Verzeichns, in dem Sie den Inhalt der Webseite ablegen.
  • Aktivieren Sie die neue Seite durch a2ensite vhost.dmn.tld und starten anschließend Apache neu.
  • Setzen Sie eine Firewall ein und öffnen Sie abschließend den TCP-Port 443, beispielsweise über sudo ufw allow 443/tcp.

Listing 1

<VirtualHost *:443>
ServerName vhost.dmn.tld
DocumentRoot /var/www/sites/vhost.dmn.tld
SSLEngine On
SSLCertificateFile /etc/ssl/certs/vhost.dmn.tld.crt
SSLCertificateKeyFile /etc/ssl/private/vhost.dmn.tld.key
</VirtualHost>

Das SSL-Zertifikat zum Betrieb der Seite sowie den dazugehörigen Key erzeugen Sie mit den selben Tools, die Sie auch zur Zertifikatsverwaltung einsetzen, etwa XCA [2] oder TinyCA [3]. Für einen ersten Test genügt auch ein manuell gefertigtes Zertifikat. Wie Sie es erstellen, zeigt Listing 2. Alternativ – aber aufgrund der Kosten nur für große Firmen praktikabel – nutzen Sie ein eigenes Intermediate Certificate Ihres Anbieters.

Listing 2

$ openssl req -new > vhost.dmn.tld.csr -newkey rsa:2048 -keyout vhost.dmn.tld.pem
$ openssl rsa -in vhost.dmn.tld.pem -out /etc/ssl/private/vhost.dmn.tld.key
$ openssl x509 -in vhost.dmn.tld.csr -out /etc/ssl/certs/vhost.dmn.tld.crt -req -signkey /etc/ssl/private/vhost.dmn.tld.key -days 3650

Rufen Sie nun die Webseite im Browser auf, erhalten Sie – sofern das Zertifikat nicht von einer bekannten CA (Certificate Authority) stammt – eine Fehlermeldung (Abbildung 2). Nach dem Bestätigen der Warnung zeigt die Adresszeile des Browsers durch ein blau hinterlegtes Symbol (Abbildung 3) die aktive Verschlüsselung an.

Abbildung 2: Die Firefox-Meldung warnt vor Ihrem noch unbekannten Zertifikat.
Abbildung 3: Der blaue Balken neben der Adresszeile weist auf die verschlüsselte Verbindung hin.

Nur mit Eintrittskarte

Danach gilt es, dem Webserver mitzuteilen, dass er nicht nur Verbindungen verschlüsseln soll, sondern auch Clients per SSL-Zertifikat authentifiziert. Die gültigen Schlüssel legen Sie dabei nicht etwa individuell fest, sondern speichern alle erlaubten Zertifizierungsstellen in einer Datei. Ist das vom Client angebotene Zertifikat von einer der dort genannten CAs signiert, gewährt Apache den Zugriff.

Verfügen Sie schon über eine Zertifizierungsstelle und wurden die Browser der Anwender richtig konfiguriert, dann genügt es, wenn Sie den virtuellen Host in /etc/apache2/sites-available/vhost.dmn.tld noch um die Zeilen aus Listing 3 ergänzen und Apache neu starten.

Listing 3

SSLCACertificateFile /etc/ssl/certs/intranet-ca.crt
SSLVerifyClient require
SSLVerifyDepth 5

Zeile 1 besagt, dass sich alle Zertifikate, die von den in /etc/ssl/certs/intranet-ca.crt genannten Zertifizierungsstellen unterschrieben sind, anmelden dürfen. Die Direktive in Zeile 2 erzwingt durch (require) die Anmeldung per Zertifikat. Beachten Sie: Ohne diese Anweisung findet keine Authentifizierung statt. Zeile 3 erlaubt fünf Zwischenzertifikate, was insbesondere für große Zertifizierungsstellen wichtig ist. Stammen alle Zertifikate direkt von der CA ohne Zwischen-Instanzen ab, tragen Sie hier 1 ein.

Je nach Browser erfolgt die Authentifizierung automatisch nach der Eingabe des Master-Passworts oder der Auswahl des entsprechenden Zertifikats. Im Fall von Firefox stellen Sie sicher, dass unter Bearbeiten | Einstellungen | Erweitert | Verschlüsselung, die Option Jedes Mal fragen aktiv ist (Abbildung 4). Das hilft zumindest während der Installation am Server dabei, Fehler zu entdecken. Nach dem Konfigurieren des Servers und dem Ausstatten des Browsers mit dem Zertifikat fragt der Browser sie beim nächsten Besuch der Seite danach (Abbildung 5).

Abbildung 4: Vor allem beim Einrichten des Servers hilft es, dass Firefox jedes Mal nach dem zu benutzenden Zertifikat nachfragt.
Abbildung 5: Vollendet: Nach dem Einrichten erscheint anstelle der Passwortabfrage die nach dem passenden Zertifikat.

Diese Technik erlaubt beim Passwortschutz per .htaccess das Absichern einzelner Verzeichnisse oder Adressen. Um beispielsweise nur das Wiki zu schützen, konfigurieren Sie den virtuellen Host wie in Listing 4 gezeigt. Dort sehen Sie gleichzeitig auch, wie Sie mittels mod_rewrite [4] automatisch alle unverschlüsselten Aufrufe umleiten. Achtung: Hier gibt es ein Sicherheitsrisiko, das der Kasten "Sicherheitsrisiko bei mehreren virtuellen Hosts" beschreibt. Mod_rewrite müssen Sie nur vorher per a2enmod rewrite aktivieren. Die Nutzung von Mod_rewrite ist übrigens keineswegs zwingend, sondern erspart Anwendern lediglich das händische Eintippen des HTTPS-Protokolls.

Sicherheitsrisiko bei mehreren virtuellen Hosts

Definieren Sie für dieselbe Adresse auch einen unverschlüsselten Virtual Host, wie in Listing 4, dann stellen Sie unbedingt sicher, dass dieser entweder alle Anfragen sofort umleitet, oder aber wie im Beispiel zusätzlich auf einen leeren Pfad verweist. Andernfalls stehen Ihre eigentlich geschützten Inhalte über das normale HTTP-Protokoll frei im Netz, da die Direktive SSLVerifyClient hier nicht greift.

Listing 4

<VirtualHost *:80>
ServerName vhost.dmn.tld
DocumentRoot /var/www/sites/vhost.dmn.tld-80
RewriteEngine on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [NE,L]
</VirtualHost>
<VirtualHost *:443>
ServerName vhost.dmn.tld
DocumentRoot /var/www/sites/vhost.dmn.tld
SSLEngine On
SSLCertificateFile /etc/ssl/certs/vhost.dmn.tld.crt
SSLCertificateKeyFile /etc/ssl/private/vhost.dmn.tld.key
<Location /wiki>
SSLCACertificateFile /etc/ssl/certs/intranet-ca.crt
SSLVerifyClient require
SSLVerifyDepth 5
</Location>
</VirtualHost>

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Brief und Siegel
    Das SSL-Protokoll ist aus dem Internet nicht mehr wegzudenken – sei es, um Daten zu verschlüsseln oder um mittels Zertifikaten auch deren Herkunft sicherzustellen. Wir zeigen, wie Sie schnell und günstig an ein eigenes Zertifikat kommen.
  • Geschützter Netzzugriff von unterwegs mit OpenVPN
    Mit OpenVPN bleiben Sie zumindest virtuell immer zu Hause: Sie kommunizieren auch von unterwegs abhörsicher und angriffsgeschützt mit den Rechnern im heimischen LAN, als wären Sie dort.
  • S/MIME und PGP mit Thunderbird
    Entgegen der allgemeinen Auffassung ist E-Mail alles andere als ein Medium mit Privatsphäre. Die Nachrichten sind so geheim wie jede beliebige Postkarte. Mit den richtigen Hilfsmitteln sorgen Sie dennoch für Vertraulichkeit.
  • S/MIME und PGP mit Thunderbird
    Entgegen der allgemeinen Auffassung ist E-Mail alles andere als ein Medium mit Privatsphäre. Die Nachrichten sind so geheim wie jede beliebige Postkarte. Mit den richtigen Hilfsmitteln sorgen Sie dennoch für Vertraulichkeit.
  • Shell-Zugriff per Webbrowser
    Eine Shell im Browser? PHPshell und Shell in a Box machen es möglich und erleichtern damit das Verwalten von Webservern auch ohne SSH-Zugang – beispielsweise aus dem nächsten Internet-Café.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...