SSL Encryption with Let’s Encrypt
Eine aktualisierte Version des Artikels für Installationen mit Nginx-Reverse-Proxy findet sich hier.
Dieser Artikel bezieht sich technisch auf eine Standard-Paket-Installation (Im Beispiel auf Debian 10) von EGroupware in einer hier gezeigten Umgebung.
!!! Diese Anleitung ist so wie unten beschrieben nicht auf eine 20.1-Standard-Installation mit Nginx anwendbar !!!
Der Zugriff auf EGroupware sollte IMMER verschlüsselt erfolgen. Das heißt, die Web-Adresse sollte mit https:// beginnen.
Gründe
- Die Kommunikation zwischen Web-Browser und EGroupware-Server ist abhörsicher
- Die Zugangsdaten werden verschlüsselt übertragen
- Die Synchronisation mit iOS verlangt SSL-Verschlüsselung
- Die Kommunikation von EGroupware mit anderen Diensten (Collabora Online, …) verlangt SSL-Verschlüsselung
Somit ist der Webserver (bis EGw 17.1) bzw. der Reverse-Proxy (ab EGw 19.1, NICHT der NGINX im Docker-Container!, siehe Docker (in EGroupware 19.1)?) zwingend mit einer SSL-Konfiguration und einem Zertifikat auszustatten. Das sollte unbedingt auch berücksichtigt werden, wenn EGroupware ausschließlich in einem lokalen Netzwerk betrieben wird.
Die einfachste Lösung in einer Standard-Installation ist die Verwendung von Zertifikaten von Let’s Encrypt. Mit Hilfe eines Clients wird das Zertifikat erzeugt, auf den Server kopiert und die Konfiguration des Webservers vorgenommen.
Installation
Certbot benötigt eine korrekte Konfiguration des Webservers mit einer (der) Domain-Adresse. In diesem Fall in der
/etc/apache2/sites-available/000-default-le-ssl.conf
In Debian 10 kann der Let’s Encrypt-Client (Certbot) direkt installiert werden:
apt install certbot python-certbot-apache
Dann Certbot ausführen:
certbot --apache
Es folgt eine interaktive Abfrage einiger Daten. Letztendlich muss die Domain und sollte die automatische Weiterleitung auf https ausgewählt werden.
EGroupware sollte nun per https erreichbar sein. Auch die ggf. eingestellt automatische Weiterleitung auf https sollte man testen.
Voraussetzung ist IMMER, dass der EGroupware-Server unter einem Domain-Namen erreichbar ist. Eine IP-Adresse funktioniert nicht!
Dazu ist es ratsam, sich bei einem Provider ein Paket mit einer Domain zu buchen. Dieser Provider muss es zulassen, dass dieser Domain oder einer angelegten Sub-Domain eine feste IP zugeordnet werden kann oder man die Domain mit einer dynamischen Adresse versorgen kann. Dies kann der lokale Router oder eine Software auf dem Server (z. B. ddclient) übernehmen.
Bei Let’s Encrypt werden Domain-validierte Zertifikate ausgestellt. Das heißt, Let’s Encrypt prüft die Erreichbarkeit (auf Port 80, unverschlüsselt) der Domain (deshalb Domain-Name, nicht IP).
Auf dem Router müssen für die Erreichbarkeit des EGroupware-Servers die Ports 80 und 443 weiter geleitet werden.
Ggf. muss auf dem Router/der Firewall Geo-IP-Blocker für USA deaktiviert werden. Die Server stehen dort.
Ebenso muss die ggf. eingerichtete/aktivierte Firewall auf dem Server entsprechend konfiguriert werden, dass neben Port 443 auch Port 80 durchgelassen wird.
Der Webserver kann durch Certbot so konfiguriert werden, dass später Anfragen unter http auf https weitergeleitet werden. Damit braucht man bei Eintippen der Adresse https nicht mit einzugeben und verhindert eine versehentlich unverschlüsselte Verbindung.
Die Let’s Encrypt-Zertifikate haben eine Gültigkeitsdauer von 3 Monaten. Vor Ablauf müssen die Zertifikate erneuert werden. Bei der oben beschriebenen Installation geschieht das automatisch. Voraussetzung ist, dass der Dienst nicht deaktiviert wird und der Server auch weiterhin auf Port 80 erreichbar ist.
Vor Ablauf der Frist bekommt man an die angegebene E-Mail-Adresse eine Hinweis-Mail, dass das Zertifikat bald abläuft. Falls die Automatik nicht funktioniert.
Optionale Konfiguration
Die Verbindung zwischen Web-Proxy und Webbrowser ist nun SSL-verschlüsselt. Die Qualität der Verschlüsselung lässt sich aber in der Regel erhöhen.
Die Qualität der Verschlüsselung kann z. B. hier getestet werden:
https://www.ssllabs.com/ssltest/
Mit den Standard-Einstellungen erreicht man eine A-Einstufung:
Das stellt sozusagen den “Kompatibilitäts-Modus” dar. Mit den Einstellungen bedient man praktisch jedes Gerät/Browser.
Das kann und sollte man verbessern. Wenn keine alten Endgeräte/Browser verwendet werden, sollte TLS 1.0 / TLS 1.1 und unnötige (potentiell unsichere) Cipher (jeweils die orangen Einträge) abgeschaltet werden:
Die Konfiguration nimmt man auf dem Host (Reverse-Proxy) in der
/etc/letsencrypt/options-ssl-apache.conf
vor.
Im Beispiel:
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
Nach einem
service apache2 restart
kann man den Test bei ssllabs noch einmal durchlaufen lassen:
Wenn man nun noch HSTS einschaltet:
Header always set Strict-Transport-Security "max-age=63072000"
Ist eine A+ Einstufung erreichbar:
Die Liste im unteren Bereich der Auswertung zeigt, welche Endgeräte/Browser unterstützt werden.
Hilfe bei der Konfiguration bietet Mozilla mit seinem SSL Configuration Generator:
https://ssl-config.mozilla.org/#server=apache&server-version=2.4.39&config=intermediate
Ebenfalls in der
/etc/letsencrypt/options-ssl-apache.conf
kann man HTTP/2 einschalten:
Protocols h2 http/1.1
Das bringt in manchen Situation Geschwindigkeitsvorteile bei der Übertragung zum Browser.
Somit sieht der wesentliche Teil der options-ssl-apache.conf
so aus:
# Intermediate configuration, tweak to your needs
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
Protocols h2 http/1.1
Header always set Strict-Transport-Security "max-age=63072000"
Für weitere Anregungen bitte ein Thema hier im Forum erstellen.
Wie immer gilt: VORHER eine Datensicherung der Webserver-Konfigurationen anfertigen!
Keine Garantie für die obigen Ausführungen!
Weiterführende Links:
Welcome to the Certbot documentation!
Einschaltung des Protokolls TLS 1.3 auf dem Server
How To Secure Apache with Let’s Encrypt on Ubuntu 18.04
Linux-Magazin: Richtig einstellen: HTTP/2 für Nginx
Admin Network & Security: HTTP/1.1 versus HTTP/2 and HTTP/3