Nextcloud und Let´s Encrypt

Im Artikel ➡ Nextcloud auf dem Raspberry Pi habe ich beschrieben wie ihr Nextcloud auf einem Raspberry Pi einrichtet. In diesem Beitrag erkläre ich auch, wie ihr eure Nextcloud-Installation auch von unterwegs über das Internet erreicht.

Ihr benötigt für dieses Vorhaben entweder eine feste, statische IP-Adresse die euch vom ISP zugewiesen wird oder ihr verwendet einen DynDNS-Anbieter. Ich verwende hierfür den gleichen Anbieter und den gleichen Zugang, welchen ich schon für OpenVPN verwende ➡ Eigener VPN-Tunnel mit dem Raspberry Pi. In diesem Artikel habe ich auch schon beschrieben, wie der DynDNS-Zugang einzutragen ist.

Bevor es an die Erstellung des Zertifikats und an die Konfiguration des Raspberry Pi geht, muss eine Portweiterleitung auf eurem Router eingerichtet werden. Ich führe da hier an einem Beispiel eines AVM-Routers aus.

Die Portfreigabe für Nextcloud sieht wie folgt aus:

Portfreigabe einrichten
Portfreigabe einrichten
Portfreigabe einrichten - Gerät auswählen
Portfreigabe einrichten – Gerät auswählen
Portfreigabe einrichten - Portfreigabe
Portfreigabe einrichten – Portfreigabe
Portfreigabe einrichten - Portfreigabe
Portfreigabe einrichten – Portfreigabe

Nachdem ihr euren DynDNS-Anbieter und die Portfreigabe im Router eingetragen habt, könne wir auf dem Raspberry Pi Let´s Encrypt starten.

Ihr benötigt für die Konfiguration:

  1. eine gültige E-Mail-Adresse
  2. eueren DynDNS-Namen, den ihr im Router eingetragen habt

Startet die Einrichtung und folgt den Anweisungen. Let´s Encrypt aktiviert in diesem Zuge automatisch SSL für euren Apache2 Webserver.

sudo a2enmod ssl
sudo a2enmod headers
sudo service apache2 restart
sudo apt install git -y
cd /etc
sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
sudo ./letsencrypt-auto

Update Dezember 2019
Kommt bei euch die Fehlemeldung „We were not be able to guess the right solution from your pip output.„, dann hilft ggf. das Löschen der pip.conf-Datei.

sudo rm /etc/pip.conf

Die Beantragung eines neuen Let´s Encrypt-Zertifikats ist hier im Detail dargestellt.

pi@raspberrypi:/etc/letsencrypt $ sudo ./letsencrypt-auto
Bootstrapping dependencies for Debian-based OSes... (you can skip this with --no-bootstrap)
OK:1 http://archive.raspberrypi.org/debian buster InRelease
OK:2 http://raspbian.raspberrypi.org/raspbian buster InRelease
Paketlisten werden gelesen... Fertig
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
augeas-lenses ist schon die neueste Version (1.11.0-3).
ca-certificates ist schon die neueste Version (20190110).
gcc ist schon die neueste Version (4:8.3.0-1+rpi2).
libaugeas0 ist schon die neueste Version (1.11.0-3).
libffi-dev ist schon die neueste Version (3.2.1-9).
libssl-dev ist schon die neueste Version (1.1.1d-0+deb10u2).
openssl ist schon die neueste Version (1.1.1d-0+deb10u2).
python ist schon die neueste Version (2.7.16-1).
python-dev ist schon die neueste Version (2.7.16-1).
python-virtualenv ist schon die neueste Version (15.1.0+ds-2).
virtualenv ist schon die neueste Version (15.1.0+ds-2).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): meine-nextcloud.de
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for meine-nextcloud.de
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Enabled Apache rewrite module
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://meine-nextcloud.de

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=meine-nextcloud.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/meine-nextcloud.de/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/meine-nextcloud.de/privkey.pem
   Your cert will expire on yyyy-mm-dd. To obtain a new or tweaked
   version of this certificate in the future, simply run
   letsencrypt-auto again with the "certonly" option. To
   non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

pi@raspberrypi:/etc/letsencrypt $

Der Ordner /etc/letsencrypt enthält alle Informationen und das Zertifikat und sollte am besten zusätzlich noch gesichert werden

Da das Let´s Encrypt nach 3 Monaten automatisch abläuft müssen wir es regelmäßig über einen CRON-Job erneuern lassen.
Wir legen dazu eine neue Datei mit den Domaininformationen an:

cd /etc/letsencrypt
sudo nano cli.ini

rsa-key-size = 4096
text = True
redirect = True
renew-by-default = True
agree-tos = True
email = 

Ihr müsst in der Zeile email eure E-Mail-Adresse, die ihr bei der Erzeugung des Zertifikats verwendet habt eintragen.

Den Update-Prozess für das Zertifikats könnt ihr im Terminal bereits prüfen, ihr müsst lediglich mydyndns.dns.de durch eure Domain ersetzen.

sudo /etc/letsencrypt/letsencrypt-auto certonly --agree-tos --renew-by-default -a webroot --webroot-path /var/www/html/ -d mydyndns.dns.de

Läuft alles ohne Fehlermeldung durch, können wir den Cron-Job anlegen

sudo crontab -e

Tragt am Ende der Datei die Zeile mit dem angepassten Domainnamen ein.

@weekly root /etc/letsencrypt/letsencrypt-auto certonly --agree-tos --renew-by-default -a webroot --webroot-path /var/www/html/ -d mydyndns.dns.de

Update vom 15.06.2018
Das mit der Erneuerung des Zertifikats hat bei mir mit dieser Option leider nicht funktioniert. Es war eine Anpassung erforderlich. Das Ganze gibts in einem extra Beitrag zum nachlesen
Let’s Encrypt – Zertifikatserneuerung schlägt fehlt

Das wars, damit wird euer Let´s Encrypt Zertifikat regelmäßg automatisch erneuert, vorausgesetzt euer Pi läuft.

Es sind nun noch zwei kleine Änderungen an Dateien des Apache2 zu machen:

  1. /etc/apache2/sites-available/000-default.conf
  2. /etc/apache2/sites-available/000-default-le-ssl.conf

Dort sind jeweils am Ende die folgenden Zeilen einzutragen:

<Directory /var/www/html/>
 Options +FollowSymlinks
 AllowOverride All
</Directory>

Bevor wir aber eine Änderung an den Dateien durchführen, legen wir noch ein Backup an.

cd /etc/apache2/sites-available
sudo cp 000-default.conf 000-default.conf-bak
sudo cp 000-default-le-ssl.conf 000-default-le-ssl.conf-bak
sudo nano 000-default.conf
sudo nano 000-default-le-ssl.conf
sudo service apache2 restart

/etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default.conf
/etc/apache2/sites-available/000-default-le-ssl.conf
/etc/apache2/sites-available/000-default-le-ssl.conf

Zum Schluss müssen wir Nextcloud noch mitteilen, dass wir eine eigene neue Domain haben über die wir das Webportal aufrufen können.
Die Konfiguration wird in der Datei /var/www/html/nextcloud/config/config.php gemacht.

Dort sucht ihr nach dem Abschnitt:

  'trusted_domains' =>
  array (
    0 => '192.xxx.xxx.xxx',

  ),

Fügt nach 0 => eine weitere Zeile hinzu und tragt dort eure Domain ein

  'trusted_domains' =>
  array (
    0 => '192.xxx.xxx.xxx',
    1 => 'mydyndns.dns.de',
  ),

Startet nun euren Apache neu und ihr solltet über euere Domain eure Nextcloud-Instanz erreichen.

sudo service apache2 restart

Nextcloud empfiehlt noch ein dem Beitrag Hardening and Security Guidance den Webtraffic ständig über SSL laufen zu lassen. Hierfür ist es erforderlich, dass ihr eine Virtual Hosts-Datei im Verzeichnis /etc/apache2/sites-available/ anlegt.

Der Name der Datei setzt sich zusammen aus eurem Domain-Namen und der Datei-Endung conf. z.B. mydyndns.dns.de.conf

In die Datei müsst ihr den folgenden Absatz einfügen

<VirtualHost *:80>
   ServerName mydyndns.dns.de
   Redirect permanent / https://mydyndns.dns.de/nextcloud
</VirtualHost>

cd /etc/apache2/sites-available
sudo nano mydyndns.dns.de.conf
sudo service apache2 restart

Nextcloud Artikelserie

  1. Nextcloud auf dem Raspberry Pi
  2. Nextcloud und Let´s Encrypt
  3. Nextcloud – Konfiguration und App-Installation
  4. Nextcloud – E-Mail-Versand einrichten
  5. Raspian und Nextcloud absichern

Bildquelle: raspberrypi.org

10 Antworten auf „Nextcloud und Let´s Encrypt“

  1. Moin,zunächst mal vielen Dank für die Anleitung bezüglich Nextcloud und Letsencrypt.Ich hatte für das letztere ein wenig Probleme und meine auch herausgefunden zu haben, weshalb: Die Zertifikatserstellung scheiterte immer an der „Validation“. Kann es sein, dass Letsencrypt die Validation über http, also Port 80 laufen lässt? Dann müsste man doch auch dort eine Portweiterleitung einrichten.Oder denke ich falsch?Überprüfen kann ich es nun leider nicht, da ich laut Letsencrypt meine rate-limits erreicht habe (bei selfhost.eu).Besten Gruß, Daniel

  2. Hi,ich drehe hier auch durch. Bei mir ging das mit den Zertifikaten auch nur mit der Freigabe von Port 80. Allerdings kann ich über https nichts aufrufen, die URL wird immer verlängert:https://meine.domain.net/nextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudnextcloudIch habe schon alles überprüft, bin aber im Moment ratlos.GrußMarkus

  3. Moin, ich noch mal. Nach einer Woche waren meine rate-limits wieder „unlimited“ und ich konnte die Letsencrypt-Prozedur über Port 80 laufen lassen. Mittlerweile läuft meine Nextcloud schon über drei Monate. Danke noch mal, Stefan!

  4. OwnCloud läuft erfolgreich, ist ja fast das gleiche wie Nextcloud. 😉 Nicht schlagen.Hierzu habe ich die Installation von dietpi verwendet.Beim Einrichten für HTTPS stosse ich aber auch ein unlösbares Probelm auf meinem Raspberry Pi 3+.Das Verzeichnis /etc/apache2/sites-available existiert nicht.Somit habe ich auch keine Datei „default-ssl“. Zwischenzeitlich habe ich diese hier gefunden: https://im-coder.com/site-existiert-nicht-fuer-a2ensite.html und diese nach /var/www/owncloud/ verschoben. Die Datei ist entsprechend dieser Beschreibung modifiziert: https://dietpi.com/phpbb/viewtopic.php?f=8&t=5&start=10Unter „Einstellungen“ – „Verschlüsselung“ bekomme ich die Fehlermeldung „Kein Verschlüsselungs-Modul geladen, bitte aktiviere ein Verschlüsselungs-Modul im Anwendungs-Menü.Ich habe leider keine Anleitung gefunden, wie dies zu aktivieren ist. Über einen Hinweis würde ich mich sehr freuen.Für die manuelle Einrichtung wird immer ein Verzeichnis occ verwendet, welches ich nicht habe. Somit scheint irgendein Paket zu fehlen. Eine Idee, welches?Danke Marc

  5. Hallo zusammen,ich habe versucht mit dieser Anleitung das SSl zu erstellen und nach edm start von letsancrypt-auto bricht die Routine ab mit folgendem Inhalt:—Requirement already satisfied: setuptools>=1.0 in /opt/eff.org/certbot/venv/lib/python2.7/site-packages (from josepy==1.1.0->-r /tmp/tmp.F7DwapMySR/letsencrypt-auto-requirements.txt (line 87))THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.    pycparser==2.19 from https://www.piwheels.org/simple/pycparser/pycparser-2.19-py2.py3-none-any.whl#sha256=344870c533812cb119c5475b5aed033ec546118711338ff9b2b78e67098d64e7 (from -r /tmp/tmp.F7DwapMySR/letsencrypt-auto-requirements.txt (line 105)):        Expected sha256 a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3             Got        344870c533812cb119c5475b5aed033ec546118711338ff9b2b78e67098d64e7=====================================================Certbot has problem setting up the virtual environment.We were not be able to guess the right solution from your pipoutput.Consult https://certbot.eff.org/docs/install.html#problems-with-python-virtual-environmentfor possible solutions.You may also find some support resources at https://certbot.eff.org/support/ .Leider kann ich damit nix anfangen.Weiß jemand Rat?

  6. Hallo,danke für die bisher sehr übersichtlich und strukturiert gestaltete Anleitung.Leider erhalte ich den selben Fehler wie Oliver.Scheinbar stimmen die checksummen nicht mehr überein.Was kann man tuen um dieses Problem zu umgehen/zu beheben?Danke und Grüße

  7. Hallo Stefan, auch noch mal ein dickes Danke für die Anleitung, hat mir bei der Einrichtung super geholfen. Wie die beiden Kommentare vor mir habe ich jetzt allerdings auch den Fehler mit den nicht übereinstimmenden Hashes. Wäre super wenn du da eine Lösung hättest.Grüße Jens

  8. Hallo zusammen,

    ich habe bzw. hatte das gleiche Problem.
    Das Problem mit dem Hashes konnte ich durch das Löschen der pip.conf beheben.
    Dafür habe ich mir zuvor beim basteln irgendetwas am apache2 zerlegt, sodass ich den nicht mehr gestartet bekomme.

    Lesst euch das einmal durch, da steht nicht nur die Lösung/Workarround sondern auch die Ursuche. Ist aber alle auf englisch.

    https://community.letsencrypt.org/t/certbot-auto-certificates-fails-while-installing-phyton-packages-with-these-packages-do-not-match-the-hashes/90363

    VG Denni

  9. Hallo zusammen,

    kleines Update zu meinen Kommentar von gestern:
    Es läuft wieder alles mit neuem Zertifikat – so wie es soll. 🙂
    Durch meine Bastelei habe ich mir nur mehr Arbeit gemacht, als nötig war. Frühres verwenden der Google-Suche hätte mir vieles erspart.

    Ich habe mir noch den Certbot installiert, wie es im verlinkten Thread auch genannt wurde – glaube aber kaum das es einen Einfluss hatte.

    Löscht am besten die pip.conf und führt dann die Zertifikatserneuerung nochmal durch. Die pip.conf besteht im wesentlichen nur aus einer Zeile mit einer URL.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.