Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
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.
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.
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
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
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
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 im SSL-Zertifikat würde dieses Szenario funktionieren.
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!
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.
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 . Dies kann man mit dem Modul mod_rewrite erreichen.