ubuntuusers.deWikiApacheSSL

SSL

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Diese Anleitung beschreibt die Aktivierung der SSL-Verschlüsselung für den Apache2-Webserver. Dadurch ist es möglich, Webseiten vom eigenen Webserver verschlüsselt über das Internet zu öffnen. Dabei wird ein selbst erstelltes SSL-Zertifikat genutzt. Soll der Webserver in einem öffentlichen Rahmen laufen, so sollte man sich um ein korrektes Zertifikat bemühen. Siehe Links am Ende der Seite.

Vorbereitungen

SSL Zertifikat erzeugen

Experten-Info:

Dieser Schritt kann entfallen, wenn man schon über ein Zertifikat verfügt.

Als erster Schritt muss ein Zertifikat erstellt werden. Da hier verschiedene, zum Teil ineinander geschachtelte Befehle ausgeführt werden müssen, empfiehlt es sich ein Pseudo-Root-Terminal [1] mittels

sudo -s 

zu öffnen. Danach kann man das Zertifikat erzeugen.

mkdir -p /etc/apache2/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem
ln -sf /etc/apache2/ssl/apache.pem /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0
chmod 600 /etc/apache2/ssl/apache.pem 

Den Wert nach -days nach Belieben anpassen, je nachdem wie lange das Zertifikat gelten soll.

Konfiguration

Um SSL/TLS verwenden zu können, muss der Apache Webserver auf TCP Port 443 lauschen. Hierzu muss die Datei /etc/apache2/ports.conf geändert werden [2]. Diese sieht standardmäßig so aus:

Listen 192.168.1.10:80

#<IfModule mod_ssl.c>
#    Listen 443
#</IfModule>

Diese muss so abgeändert werden:

Listen 192.168.1.10:80
<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Hinweis:

Nach der Änderung muss der Apache Webserver mit "reload" neu gestartet werden[3].

service apache2 reload

Modul aktivieren

Anschließend aktiviert man das SSL-Modul des Webservers mit:

sudo a2enmod ssl 

Hinweis:

Nach dem Laden des Moduls muss der Apache Webserver mit "force-reload" neu gestartet werden[3].

SSL Webseite konfigurieren

Nun wird der VirtualHost für SSL eingerichtet. Für die Konfiguration wird die Datei /etc/apache2/sites-available/ssl mit folgendem Inhalt erstellt:

<virtualhost *:443>
...
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
...
</virtualhost>

Die neue VirtualHost-Konfiguration muss noch aktiviert werden:

sudo a2ensite ssl 

Hinweis:

Nach diesen Änderungen ist ein Neustart des Apache Webserver nötig ("force-reload")[3]

Experten-Info:

Hiervon darf es aus technischen Gründen nur einen geben, da vom Apache für den Port 443 nur ein einziges SSL-Zertifikat ausgeliefert werden kann. Es ist also nicht möglich, die Adressen https://www.seite1.de und https://www.seite2.de über den selben Apache ausliefern zu lassen. Nur unter Verwendung einer zusätzlichen IP-Nummer (und anschließender Anpassung der Listen-Direktiven) oder bei einem entsprechenden Vorhandensein der subjAltName-Erweiterung {en} im SSL-Zertifikat würde dieses Szenario funktionieren.

Probleme

Port 443 schon von Apache selbst belegt

Erscheint beim Starten des Servers die Fehlermeldung

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down

so sollten die Einträge in /etc/apache2/ports.conf überprüft werden.

Dort darf der Eintrag

Listen 443

nur einmal vorhanden sein. Auch in anderen Dateien der Apache-Konfiguration darf diese Direktive nicht nochmal vorkommen!

SSL Fehlermeldung beim Verbindungsaufbau

Erscheint beim Seitenaufruf im Browser die Fehlermeldung

Fehlercode: ssl_error_rx_record_too_long

liegt das meist an fehlerhaft konfigurierten vHosts. Die wichtigsten Eckdaten für einen reibungslosen Betrieb von vHosts mit SSL sind wie folgt:

Es sollten zwei NameServerHost-Einträge innerhalb der Dateien in /etc/apache2/sites-available/ vorhanden sein

NameVirtualHost *:80
NameVirtualHost *:443

Der Eintrag für Port 80 sollte in default und der Eintrag für Port 443 in ssl sein, dies muss nicht so sein; sollte es aber, wenn lediglich diesem Wiki-Beitrag gefolgt wurde und ansonsten keine Änderungen der Konfiguration vorgenommen wurden.

Tipps

Oftmals wird es gewünscht, dass gewisse Seiten nur über https erreicht werden können. Ein klassisches Beispiel sind Webmailer wie Squirrelmail oder RoundCube Webmail {en} . Dies kann man mit dem Modul mod_rewrite für Apache erreichen.

Diese Revision wurde am 11. Oktober 2011 um 18:56 Uhr von Canomat erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet: Netzwerk, Server, Internet, Sicherheit, Verschlüsselung

Passwort vergessen?