Im vorherigen Artikel habe ich beschrieben, wie man den Raspberry Pi und den Router konfiguriert, um auf die Nextcloud aus dem Internet zuzugreifen. Da die Verbindung derzeit unverschlüsselt ist, werde ich nun erläutern, wie man eine SSL-Verschlüsselung implementieren und erzwingen kann.
Installation
Zu Beginn installieren wir Certbot, um ein Let’s-Encrypt-Zertifikat zu erstellen.
1 |
sudo apt install python3-certbot-apache -y |
Der Vorgang wird wie folgt gestartet. Dabei ist es wichtig, die korrekte DynDNS-Adresse (dnsHome.de) anzugeben. Zudem muss eine eMail-Adresse hinterlegt werden.
1 |
sudo certbot --apache |
Nachdem das Zertifikat ausgestellt wurde, folgt die Konfiguration des VirtualHost. Diesen erstellt man mit dem folgenden Befehl und fügt den unten aufgeführten Block in die Datei /etc/apache2/sites-available/raspi.conf ein.
Dabei müssen die Pfade für das Zertifikat und der Servername an die eigene DynDNS angepasst werden.
1 |
sudo nano /etc/apache2/sites-available/raspi.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/nextcloud ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/nextcloud # Header always set Strict-Transport-Security "max-age=31536000" # Header append X-FRAME-OPTIONS "SAMEORIGIN" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/meinecloud.dnshome.de/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/meinecloud.dnshome.de/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf ServerName meinecloud.dnshome.de </VirtualHost> </IfModule> |
Nun werden die nicht mehr benötigten Vorgaben der VirtualHosts deaktiviert, der neue VirtualHost aktiviert und das SSL-Modul des Apache2 eingeschaltet.
1 2 3 4 |
sudo a2dissite 000-default.conf sudo a2dissite 000-default-le-ssl.conf sudo a2ensite raspi.conf sudo a2enmod ssl |
Danach wird der Webserver neu gestartet.
1 |
sudo service apache2 restart |
HTTPS erzwingen
Um Verbindungen über HTTPS zu erzwingen, muss das Apache2-Modul „rewrite“ aktiviert werden.
1 |
sudo a2enmod rewrite |
Danach öffnen wir den VirtualHost erneut
1 |
sudo nano /etc/apache2/sites-available/raspi.conf |
und fügen die folgenden drei Rewrite-Zeilen hinzu.
1 2 3 4 5 |
<VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ... |
Anschließend wird der Webserver erneut neu gestartet.
1 |
sudo service apache2 restart |
Regelmäßige Erneuerung des SSL-Zertifikats
Ein Let’s Encrypt-Zertifikat sollte monatlich erneuert werden, um sicherzustellen, dass die verschlüsselte Kommunikation auf Ihrer Website
kontinuierlich geschützt ist. Die regelmäßige Erneuerung gewährleistet, dass das Zertifikat gültig bleibt und Ihre Websitebesucher vor potenziellen Sicherheitsrisiken wie Man-in-the-Middle-Angriffen geschützt werden.
Dafür navigieren wir zum Home-Verzeichnis
1 |
cd ~/ |
und erstellen die Datei zertifikat.sh.
1 |
nano zertifikat.sh |
Dort wird der folgende Inhalt eingetragen.
1 2 3 |
#!/bin/bash certbot certonly --renew-by-default --apache --rsa-key-size 4096 -d meinecloud.dnshome.de /etc/init.d/apache2 restart |
Auch hier ist der Servername an die eigene DynDNS anzupassen.
Nun wird das erstellte Skript ausführbar gemacht
1 |
sudo chmod +x zertifikat.sh |
und ein Cronjob erstellt,
1 |
sudo nano /etc/crontab |
der das Script jeweils am 1. jeden Monats um 2:30 Uhr ausführt. Dabei ist folgende Zeile am Ende hinzuzufügen
1 |
30 2 1 * * root /home/radiouser/zertifikat.sh >/home/radiouser/zertifikat.log 2>&1 |
und der Cronjob neu zu starten.
1 |
sudo /etc/init.d/cron restart |
Vorschau
Im nächsten Teil zeige ich, wie man die aufgelaufenen Fehler nach der Erstinstallation der Nextcloud beheben kann.