ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.
WikiApacheSSL

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 mit den folgenden Befehlen 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). Mit dem Befehl

exit 

schliesst man das Root-Terminal wieder.

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:

1
2
3
4
5
Listen 192.168.1.10:80

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

Diese muss so abgeändert werden:

1
2
3
4
Listen 192.168.1.10:80
<IfModule mod_ssl.c>
    Listen 443
</IfModule>

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 

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

sudo service apache2 force-reload 

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:

1
2
3
4
5
<virtualhost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
        DocumentRoot /pfad/zum/Webinhalt
</virtualhost>

Die neue VirtualHost-Konfiguration muss noch aktiviert werden:

sudo a2ensite ssl 

Nach diesen Änderungen muss der Apache Webserver mit "force-reload" neu gestartet werden.

service apache2 force-reload 

Experten-Info:

Einen VirtualHost für den Port 443 darf es aus technischen Gründen nur einmal geben, da Apache für diesen Port nur ein einziges SSL-Zertifikat ausliefern 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.

Problembehebung

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

1
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

1
2
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 erreichen.

ubuntuusers.local › WikiApacheSSL