Mod ssl: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung  | 
				Keine Bearbeitungszusammenfassung  | 
				||
| Zeile 1: | Zeile 1: | ||
= TMP =  | |||
== Einleitung ==  | |||
Aktivierung der [wikipedia:Transport_Layer_Security: SSL-Verschlüsselung] für den Webserver [:Apache: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/#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 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 [:Apache/Virtual_Hosts: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 [https://wiki.apache.org/httpd/RedirectSSL Redirect-Directive]  oder mit dem Apache-Modul [:Apache/mod_rewrite/#Alles-auf-HTTPS-umleiten:mod_rewrite] erreicht werden.  | |||
 <VirtualHost *:80>  | |||
     Redirect permanent / https://SERVER_NAME/  | |||
 </VirtualHost>  | |||
=== HSTS ===  | |||
Um die Sicherheit noch weiter zu erhöhen, kann das [wikipedia:Hypertext_Transfer_Protocol_Secure#HSTS: HTTP Strict Transport Security (HSTS)]-Verfahren eingesetzt werden. Dadurch werden z. B. [wikipedia:Man-in-the-middle-Angriff: 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  | |||
 #!code apache  | |||
 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:  | |||
 #!code apache  | |||
 VirtualHost *:80  | |||
 VirtualHost *:443  | |||
== Links ==  | |||
=== intern ===  | |||
 * [:SSL:] Erlangung eines SSL-Zertifikates  | |||
=== extern ===  | |||
# [http://httpd.apache.org/docs/2.4/ssl/ mod_ssl]  - Dokumentation bei apache.org  | |||
# [github:nabla-c0d3/sslyze:SSLyze]  - umfangreiche Testsuite für SSL-Server  | |||
# [https://www.ssllabs.com/ssltest/ SSL Server Test]  - Online-Prüfung, Qualys SSL Labs  | |||
# [wikipedia:SSL-Verschlüsselung: SSL-Verschlüsselung]  | |||
{{DISPLAYTITLE:mod_ssl}}  | {{DISPLAYTITLE:mod_ssl}}  | ||
{{DEFAULTSORT:mod_ssl}}  | {{DEFAULTSORT:mod_ssl}}  | ||
[[Kategorie:Apache/HTTP/Module]]  | [[Kategorie:Apache/HTTP/Module]]  | ||
Version vom 6. Mai 2024, 17:03 Uhr
TMP
Einleitung
Aktivierung der [wikipedia:Transport_Layer_Security: SSL-Verschlüsselung] für den Webserver [:Apache: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/#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 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 [:Apache/Virtual_Hosts: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 [:Apache/mod_rewrite/#Alles-auf-HTTPS-umleiten:mod_rewrite] erreicht werden.
<VirtualHost *:80>
    Redirect permanent / https://SERVER_NAME/
</VirtualHost>
HSTS
Um die Sicherheit noch weiter zu erhöhen, kann das [wikipedia:Hypertext_Transfer_Protocol_Secure#HSTS: HTTP Strict Transport Security (HSTS)]-Verfahren eingesetzt werden. Dadurch werden z. B. [wikipedia:Man-in-the-middle-Angriff: 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
#!code apache 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:
#!code apache VirtualHost *:80 VirtualHost *:443
Links
intern
* [:SSL:] Erlangung eines SSL-Zertifikates
extern
- mod_ssl - Dokumentation bei apache.org
 - [github:nabla-c0d3/sslyze:SSLyze] - umfangreiche Testsuite für SSL-Server
 - SSL Server Test - Online-Prüfung, Qualys SSL Labs
 - [wikipedia:SSL-Verschlüsselung: SSL-Verschlüsselung]