mod ssl
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Einleitung¶
Diese Anleitung beschreibt die Aktivierung der SSL-Verschlüsselung für den Webserver Apache2.
Der Artikel zur Erzeugung eines dazu nötigen SSL-Zertifikates samt zugehörigem privaten Schlüssel findet sich ab sofort hier: TLS-Zertifikate .
Installation¶
Das SSL-Modul des Apache wird zusammen mit der Installation von Apache 2.4 (Abschnitt „Installation“) installiert.
Benutzung¶
Modul aktivieren¶
Zur Verwendung muss das Modul noch einmalig aktiviert werden. Das geschieht mit den Kommandos
sudo a2enmod ssl sudo service apache2 restart
Konfiguration¶
Um TLS/SSL verwenden zu können, muss der Apache auf TCP-Port 443
lauschen. Dies wird in der Datei /etc/apache2/ports.conf definiert. Wichtig ist dabei der Abschnitt
<IfModule ssl_module> Listen 443 </IfModule>
In älteren Ubuntu- bzw. Apache-Versionen ist dieser Abschnitt u.U. auskommentiert und damit abgeschaltet. Zur Aktivierung müssen lediglich die Kommentarzeichen (vorangestellte #) entfernt werden.
Nach dieser Änderung muss die Konfiguration des Apache neu eingelesen werden:
sudo service apache2 reload
SSL-Webseite konfigurieren¶
Abschließend muss nur noch ein Virtual Host für TLS/SSL eingerichtet werden. Im folgenden Beispiel wird davon ausgegangen, dass ein SSL-Zertifikat unter /etc/ssl/certs/apache.crt und ein zugehöriger Schlüssel unter /etc/ssl/private/apache.key abgelegt wurde.
Für die Konfiguration wird die Datei /etc/apache2/sites-available/ssl.conf mit folgendem Inhalt erstellt:
<VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/certs/apache.crt SSLCertificateKeyFile /etc/ssl/private/apache.key # Pfad zu den Webinhalten DocumentRoot /var/www/html/ </VirtualHost>
Dieser VirtualHost wird nun mit
sudo a2ensite ssl.conf
aktiviert. Anschließend lässt man den Apache die Konfiguration und lädt bei Erfolg die Konfiguration in den laufenden Apache:
sudo apache2ctl configtest && sudo service apache2 reload
Ausbau¶
SSL erzwingen¶
Oftmals wird gewünscht, dass Seiten nur über https://
erreicht werden können. Dies kann in vielen Fällen einfach mit der Apache Redirect-Directive 🇬🇧 oder mit dem Apache-Modul mod_rewrite erreicht werden.
<VirtualHost *:80> Redirect permanent / https://SERVER_NAME/ </VirtualHost>
HSTS¶
Um die Sicherheit noch weiter zu erhöhen, kann das HTTP Strict Transport Security (HSTS)-Verfahren eingesetzt werden. Dadurch werden z. B. Man-in-the-middle-Angriffe erschwert. Um diese Funktion nutzen zu können, muss zuerst das Modul mod_headers
aktiviert werden:
sudo a2enmod headers
Anschließend muss in der vHost-Konfigurationsdatei (Port 443) folgende Zeile ergänzt werden:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains;"
Mit der max-age
-Angabe wird dem Browser mitgeteilt, dass die entsprechende Website in den nächsten 365 Tagen (= 31536000 Sekunden) nur noch via HTTPS aufgerufen werden soll. Um die Änderungen wirksam zu machen, wird die Konfiguration neu geladen:
sudo service apache2 reload
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
ssl_error_rx_record_too_long
liegt das meist an fehlerhaft konfigurierten vHosts. Es sollten zwei VirtualHost-Einträge innerhalb der Dateien in /etc/apache2/sites-available/ vorhanden sein:
1 2 | VirtualHost *:80 VirtualHost *:443 |
Links¶
intern¶
SSL Erlangung eines SSL-Zertifikates
extern¶
mod_ssl 🇬🇧 - Dokumentation bei apache.org
SSLyze 🇬🇧 - umfangreiche Testsuite für SSL-Server
SSL Server Test 🇬🇧 - Online-Prüfung, Qualys SSL Labs