SSL Encryption with Let’s Encrypt (Nginx)
Eine alte Dokumentation mit Apache als Reverse-Proxy finder sich hier.
Dieser Artikel (Stand: Februar 2022) bezieht sich technisch auf eine Standard-Paket-Installation (Im Beispiel auf Debian 11) von EGroupware in einer hier gezeigten Umgebung.
Als Reverse-Proxy wird im Standard Nginx installiert/konfiguriert/verwendet.
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 der Reverse-Proxy (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.
Das SSL-Zertifikat muss von Gegenstellen validiert werden können! Das betrifft die Webrowser ebenso wie weitere installierte Dienste (Collabora Online, …). Diese haben in Ihren Containern Listen mit vertrauten Zertifikatsausstellern (CA). Selbst signierte Zertifikate werden diese Systeme nicht anerkennen. Sie können es nicht! Es sei denn, man implantiert in jeden Container nach jedem Container-Neubau/Update das Root-Zertifikat neu. Dass will man sich nicht antun…
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.
Webbrowser und Systeme in Containern vertrauen den von Let’s Encrypt ausgestellten Zertifikaten. Andere, von öffentlichen CAs ausgestellte Zertifikate, können natürlich auch verwendet werden.
Der gängigste ACME-Client ist certbot. Mit certbot lassen sich einfach kostenlose Zertifikate installieren und die regelmäßige Aktualisierung wird automatisierrt. Darum ist certbot unsere Empfehlung.
Installation
Certbot benötigt eine korrekte Konfiguration des Webservers mit einer (der) Domain-Adresse (siehe unten). In diesem Fall in der
/etc/egroupware-docker/nginx.conf
Nach dem Eintrag Servername
muss Nginx neu gestartet werden:
service nginx restart
In Debian (11/12) kann der Let’s Encrypt-Client (Certbot) direkt installiert werden:
apt install certbot python3-certbot-nginx
Dann Certbot ausführen:
certbot --nginx
Es folgt eine interaktive Abfrage einiger Daten. Letztendlich muss nur die Domain ausgewählt werden.
Es wird eine E-Mail-Adresse abgefragt. Man sollte eine valide E-Mail-Adresse eintragen. So bekommt man eine Benachrichtigung, wenn ein Zertifikat abläuft oder sich sonst wesentliche Dinge ändern. Will man das nicht, kann man der Stelle mit c
abbrechen und certbot ohne E-Mail-Abfrage aufrufen:
certbot --nginx --register-unsafely-without-email
EGroupware sollte nun per https erreichbar sein. Auch die automatische Weiterleitung auf https sollte funktionieren.
Domain(-name)
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 (A-Record) 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 wird durch Certbot so konfiguriert, 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 hat oder manuell Ports geöffnet werden müssen.
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 bereits eine gute A-Einstufung:
Die Einstellungen sind schon sehr gut gewählt und müssen nicht zwingend verändert werden. Von Zeit zu Zeit sollte man die Bewertung wiederholen. Die Bewertungskriterien entwickeln sich weiter und man kann schauen ob es Verbesserungspotential gibt.
Wenn man nun noch HSTS in
/etc/egroupware-docker/nginx.conf
einschaltet:
add_header Strict-Transport-Security max-age=31536000; # 31536000sec=1year
(haben wir vorbereitet: einfach einkommentieren)
ist eine A+ Einstufung erreichbar:
Ebenfalls in der
/etc/egroupware-docker/nginx.conf
kann man HTTP/2 einschalten:
Das bringt Geschwindigkeitsvorteile bei der Übertragung zum Browser.
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! Die Dinge können sich ändern…
Weiterführende Links:
Let’s Encrypt
Let’s Encrypt Dokumentation
Certbot documentation