2 / 7
Feb 2020

Hallo zusammen,

ich habe eine Standard eGroupware 19.1 Installation (wie in den Docs beschrieben) unter ubuntu 18 durchgeführt und nun läuft egw mit Docker und alles wurde automatisch mitinstalliert. Ich bin kein Linux Profi; finde mich gerade so zurecht.

Ich möchte gern SSL aktivieren. Normalerweise muss man das doch in der NGINX Config machen, richtig? Aber wie komme ich da jetzt ran? Wie macht man das? Gibt es eine Step-by-Step Anleitung, wie man das durchführt?

Google spuckt alles Mögliche zu Docker und NGINX aus, aber was dort beschrieben ist, passt alles nicht zu den Verzeichnissen/Dateien/Containern, die mit der eGroupware Installation gebaut wurden. Ich bin hier ehrlich gesagt komplett verloren. Könnt ihr mir bitte weiterhelfen? Vielen Dank!

Grüße
Steffen

  • created

    Feb '20
  • last reply

    Feb '20
  • 6

    replies

  • 3.1k

    views

  • 3

    users

  • 2

    likes

  • 3

    links

Generell gehört das Zertifikat nicht auf den Nginx der EGroupware / Docker Container, sondern den Proxy der direkt auf dem Host läuft.

Dessen Konfiguration liegt unter /etc/egroupware-docker/
a) Apache: apache.conf bzw.
b) Nginx: nginx.conf

Frage ist hast Du ein Zertifikat und willst das installieren oder willst Du Let’s Encrypt einrichten, damit Du ein Zertifikat bekommst?

@StefanU hat für Let’s Encrypt eine Anleitung gemacht: SSL-Verschlüsselung mit Let’s Encrypt

Falls Du Dein vorhandenes Zertifikat eintragen willst, schau mal in die Datei, da gibt es für beide Kommentare wo es in welcher Form hin muss.

Ralf

Hi Ralf,

vielen Dank für deine Antwort! Ja, ich möchte ein simples Self-Signed-Zertifikat verwenden. Ich habe alle beide Dateien in /etc/egroupware-docker/ drin. Der Inhalt der apache.conf sieht so aus:

>#################################################
># Reverse proxy for EGroupware Docker container #
>#################################################
>
># Please note:
>#
># This proxy configuration is currently included at global level in
># /etc/apache2/conf.d/egroupware-docker.conf and used for all vhosts.
>#
># You can comment it out there and include it only in a certain vhost:
>#
># <VirtualHost *:80>
># include /etc/egroupware-docker/apache.conf
># </VirtualHost>>
>
>RequestHeader set X-Forwarded-Proto "https" env=HTTPS
>ProxyPass /egroupware/ ht*p://127.0.0.1:8080/egroupware/ timeout=4000 connectiontimeout=600 >acquire=3000 retr$
>ProxyPassReverse /egroupware/ ht*p://127.0.0.1:8080/egroupware/
>
>ProxyPass /Microsoft-Server-ActiveSync ht*p://127.0.0.1:8080/Microsoft-Server-ActiveSync timeout=4000 >connect$
>ProxyPassReverse /Microsoft-Server-ActiveSync ht*p://127.0.0.1:8080/Microsoft-Server-ActiveSync
>
>RedirectMatch ^/.well-known/(caldav|carddav)$ /egroupware/groupdav.php/
>RedirectMatch ^(/principals/users/.*)$ /egroupware/groupdav.php$1
>RedirectMatch ^/$ /egroupware/index.php
>RedirectMatch ^/egroupware$ /egroupware/index.php

Ich kann dort nirgends ein Zertifikat hinterlegen. Das im Comment erwähnte Verzeichnis /etc/apache2/conf.d gibt es bei mir nicht. In der Datei nginx.conf steht die server-Routine drin. Hier kann ich es eintragen und hab es auch gemacht:

># /etc/nginx/sites-available/egroupware.conf
># need to be symlinked to /etc/nginx/sites-enabled/ and nginx -s reload (after removing default!)
>
># stuff for http block
>client_max_body_size 1g;
>
># redirects needs to use X-Forwarded-Proto too
>map $http_x_forwarded_proto $redirectscheme {
>    default $scheme;
>    https https;
>}
>
>server {
>        listen 80 default_server;
>
>        # ssl config (enable following line plus either include or ssl_certificate* line)
>        listen 443 ssl http2 default_server;
>        #include snippets/snakeoil.conf;        # requires ssl-certs package installed!
>        # concatenate private key, certificate and intermediate certs to /etc/ssl/private/certificate.pem
>        ssl_certificate /etc/ssl/private/meincert.crt;
>        ssl_certificate_key /etc/ssl/private/meincert.key;
>        # HTTP Strict-Transport-Security header (start with a short max-age!)
>        #add_header Strict-Transport-Security max-age=31536000; # 31536000sec=1year

Ein “service apache2 restart” liest diese Infos aber nicht. Ein “ht*ps://meinhost” schägt fehlt. Auch ein /etc/nginx/sites-available/-Verzeichnis gibt es bei mir nicht. Es gibt generell kein /etc/nginx-Verzeichnis. NGINX läuft ja in dem Container?!

Also wie gesagt: Ich bin hier komplett überfragt. Hast du ne Idee, wo die Zertfikate nun hin müssen?

Grüße und schon mal wieder vielen Dank im Voraus!
Steffen

Macht relativ wenig Sinn, da z.B. iOS damit nicht funktioniert und die Konfiguration von Let’s Encrypt heute deutlich einfacher ist als das self-signed Zertifikat einzurichten. Link hatte ich Dir ja schon geschickt.

Welche Distribution verwendest Du?

Die Datei wird bei einem Apache nicht verwendet, sprich die Änderung hat auch keine Auswirkung.

Hier ist nochmal eine URL mit einem Let’s Encrypt Tutorial, da kannst Du auch die Distribution auswählen:

Ralf

Hallo Steffen,

ich würde mir, in Zeiten von Let’s Encrypt, auf gar keinen Fall mehr ein selbst signiertes Zertifikat antun. Neben der von @RalfBecker angesprochenen Problematik (iOS verlangt öffentlich überprüfbare Zertifikate), nervt es gewaltig, dem Browser bei zu bringen das Zertifikat zu akzeptieren. Wenn sich dann noch mehrere (oder viele) weitere Benutzer das mit verschiedenen Browsern und Mobilgeräten antun müssen ist das nicht mehr akzeptabel.
Zudem musst du damit rechnen, dass die Softwarehersteller (Google, Apple, MS) in Zukunft selbst signierte Zertifikate noch weniger akzeptieren als heute schon.

Für ein besseres Verständnis der Zusammenhänge in deiner Installation schau mal in den Artikel:

Da kannst du auch gerade in der Grafik sehr schön sehen, an welcher Stelle das SSL “hin gehört”. Ich habe nur den EGroupware-Container etwas vereinfacht. Eigentlich sind es zwei …


Fang besser hier im Forum an zu suchen und frage dann ggf. hier. Das ist meist effektiver als mit einer Suchmaschine sich Stunden durch Treffer zu wühlen.
Wenn es schnell und professionell gehen muss sind wir als “die Macher von EGroupware” natürlich auch zu bekommen. Eine Mail an info@egroupware.org reicht für die Kontaktaufnahme.

Gruß
Stefan

Hallo @RalfBecker und @StefanU ,

vielen Dank für eure Antworten.

Let’s Encrypt kommt für unsere Umgebung leider nicht infrage, da ich nicht alle Nase lang den Server nach außen auf Port 80/443 exposen möchte, nur damit Certbot seine Checks machen kann. Die meisten unserer Server müssen (und sollen) nicht aus dem Internet heraus erreichbar sein. Let’s Encrypt zwingt einen aber dazu - das muss einfach nicht sein. Wir denken bereits über ein öffentliches Zertifikat nach, aber momentan reicht das SSC völlig, da unsere Clients dem Aussteller bereits vertrauen (das Cert ist im Store hinterlegt). IOS-Devices haben mit dem SSC ebenfalls kein Problem (wir nutzen hier die Mail-App).

Ich habe Ubuntu 18.04 (Bionic) LTS auf dem Server laufen.

Mittlerweile hab ich es auch hinbekommen. Die Site ist ganz normal unter “/etc/apache2/sites-available” zu finden. Dort hab ich die “default-ssl.conf” dupliziert, das Zertifikat hinterlegt und die neue Site aktiviert (die alte Site habe ich deaktiviert). In beiden Files sind die Configs von egw unten schon mit eingebunden gewesen. Das ist sicher im Rahmen der Installation geschehen, richtig?!
Nun nimmt er das Zertifikat und benutzt es auf den egw-Seiten weiter. So sollte es sein.

Dennoch vielen Dank für eure Hilfe!

Grüße und ein schönes Wochenende
Steffen

Inzwischen kann man da auch DNS Challenges machen, damit muss der Server überhaupt nicht extern erreichbar sein. Man braucht allerdings einen unterstützten DNS Server, damit die Challenge dort automatisiert eingetragen werden kann. Ich verwende einen CNAME auf Route53 dazu …

Ja, unser Paket hat die Includes dort eingebaut.

Ralf