Hier auf dem Blog habe ich neulich erklärt, wie man Nextcloud unter Ubuntu 16.04 installiert. Diese Installation wollen wir heute nun etwas sicherer machen, indem wir die Verbindung zum Server mittels SSL Zertifikat verschlüsseln. Dafür werden wir uns selbst ein self-signed Zertifikat auf unsere Nextcloud Server erstellen und dieses anschließend in die Nextcloud Konfiguration einbinden.
Aktivieren des SSL Modules für Apache2
Damit wir ein self-signed Zertifikat auf unserem Webserver für Nextcloud verwenden können, müssen wir zuerst das entsprechende Apache2 Modul für SSL aktivieren.
1 | a2enmod ssl |
Anschließend müssen wir apache2 neustarten.
1 | systemctl restart apache2.service |
Erstellen des self-signed Zertifikat
Im nächsten Schritt erstellen wir zuerst einen Ordner für das SSL Zertifikat.
1 | sudo mkdir /etc/apache2/ssl |
Nachdem wir einen Ordner zum Ablegen des Zertifikates erstellt haben, müssen wir dieses jetzt erzeugen. Dafür verwende ich den folgenden Befehl:
1 | sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/nextcloud.key -out /etc/apache2/ssl/nextcloud.crt |
Nach der Eingabe des Befehls werden einige Information von uns abgefragt. Diese gilt es dann entsprechend auszufüllen. Wenn wir nun in den Ordner /etc/apache2/ssl schauen, sollten dort eine nextcloud.key und eine nextcloud.crt liegen.
1 2 3 4 5 6 7 8 | root@nextcloud:/etc/apache2/ssl# ls -lsia insgesamt 24 801308 4 drwxr-xr-x 2 root root 4096 Aug 17 19:52 . 792352 4 drwxr-xr-x 9 root root 4096 Aug 13 10:51 .. 801310 4 -rw-r--r-- 1 root root 1407 Aug 13 10:52 apache.crt 801309 4 -rw-r--r-- 1 root root 1704 Aug 13 10:52 apache.key 801312 4 -rw-r--r-- 1 root root 1704 Aug 17 19:52 nextcloud.key 801313 4 -rw-r--r-- 1 root root 1229 Aug 17 19:52 nextcloud.crt |
Erstellen von nextcloud-ssl.conf
Um das soeben erstelle Zertifikat einzubinden, erstellen wir in /etc/apache2/site-available eine neue Datei mit dem Namen nextcloud-ssl.conf. Diese wird mit einem Editor geöffnet. Anschließend wird die Datei mit dem folgenden Inhalt befüllt.
1 2 3 4 5 6 7 8 9 | <VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/nextcloud ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/nextcloud.crt SSLCertificateKeyFile /etc/apache2/ssl/nextcloud.key </VirtualHost> |
Anschließend müssen wir die Konfiguration noch aktivieren.
1 | a2ensite nextcloud-ssl.conf |
Damti die Einstellungen jetzt auch geladen werden, müssen wir den Webserver einmal neustarten.
1 | systemctl restart apache2.service |
Prüfen der Nextcloud https Verbindung
Zum Testen können wir Nextcloud im Browser mit https:// aufrufen. In meinem Fall würde der Aufruf so aussehen:
https://192.168.10.69/nextcloud/
In dem Fenster das sich nun öffnet, werden wir darauf hintegwiesen, dass die Verbindung nicht sicher ist. Dies liegt daran, dass wir an dieser Stelle ein self-signed Zertifikat verwenden. Würden wir hier ein offizielles Zertifikat einer Prüfstelle verwenden oder zb. LetsEncrypt, würde dies nicht auftauchen.
Wenn wir uns die Erweiterten Informationen einblenden lassen, können wir auf die Seite weitergeleitet werden.
Wir haben nun unsere Verbindung mittels SSL verschlüsselt. Auch wenn oben das https durchgestrichen ist, funktioniert es genau so, wie mit einem Zertifikat einer entsprechenden Prüfstelle.
Hallo, vielen Dank für die Anleitung. Hat alles geklappt, nachdem ich den kleinen Rechtschreibfehler entdeckte, der sich eingeschlichen hat.
In der Zeile für die Erstellung des Zertifikats steht nextcoud.crt und in der Sites-available dann wieder nextcloud.crt.
wenn man das abgleicht, funktioniert es super.
Danke für den Hinweis =)
Hallo, vielen Dank für die Anleitung. Allerdings habe ich folgendes Problem.
Wenn ich ohne SSL auf die Nextcloud zugreife, dann habe ich die volle Bandbreite. Wenn ich das Self-Signed Zertifikat einsetze und über https auf die Nextcloud zugreife, dann habe ich nur noch rund 2MB/s. Mit http sind es 20-25MB/s. Was habe ich da falsch konfiguriert?
Hallo Rene,
wie sieht den dein Setup aus? (CPU/RAM)
Kann schon sein, dass es hier langsamer wird, weil der Datenstream ja verschlüsselt wird. Sollte aber eigentlich nicht so langsam werden.
https://docs.nextcloud.com/server/9/admin_manual/configuration_server/oc_server_tuning.html
Hier steht am Ende was bzgl. SSL und CPU Auslastung. Kannst du bei dir ja mal prüfen und mir kurz eine Rückmeldung geben =)
Gruß
Christian
Ansonsten mal journalctl -xe ausführen und prüfen ob da irgendwelche Fehler ersichtlich sind. Eventuell auch mal in die error.log schauen und außerdem prüfen ob du irgendwelche langsamen Cipher Suites verwendest siehe hier: https://unhandledexpression.com/2013/01/25/5-easy-tips-to-accelerate-ssl/
Hallo,
vielen Dank für die Antworten. Hat sich erledigt. Der Down- und Upload funktionierte wohl immer super. Allerdings von dem Anschluss, von dem ich getestet habe, habe ich nur die ~2MB Download. Werde da nochmal die INet Verbindung prüfen warum das so ist. Von 2 weiteren Glasfaser Anschlüssen habe ich vollen Download Speed.
Hallo
vielen Dank für den hilfreichen Artikel. Leider wird beim generieren des Zertifikats die Datei „nextcoud.crt“ nicht erstellt.
So sieht es bei mir aus:
# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/nextcloud.key -out /etc/apache2/ssl/nextcloud.crt
Generating a 2048 bit RSA private key
………………………………….+++
………………………………………………………………………………………………………………………….+++
writing new private key to ‚/etc/apache2/ssl/nextcloud.key‘
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.‘, the field will be left blank.
—–
Country Name (2 letter code) [AU]:problems making Certificate Request
Was mache ich nicht richtig?
Vielen Dank und Grüße Seppi
Hallo noch mal,
inzwischen läuft alles…super Anleitung.
Noch eine Abschließende Frage…wenn ich mich unter iOS mi meiner Nextcloud verbinden will kommt direkt die Warnung das das Zertifikat nicht akzeptiert wird.
Kommt damit dann eine verschlüsselte Verbindung Grundsätzlich nicht zustande?
Hallo Christian,
vielen Dank für die gute Anleitung! Bei mir werden leider die Dateien apache.crt und apache.key nicht erstellt. Bei der Abfrage: /etc/apache2/ssl# ls -lsia
werden nur
insgesamt 16
angezeigt.
Wenn ich die Seite über https aufrufe erscheint
Not Found
The requested URL /nextcloud/ was not found on this server.
Was kann ich ändern?
Mit freundlichem Gruß
Jürgen
Hallo Jürgen,
bekommst du einen Fehler wenn du das Zertifikat erstellen willst? Ansonsten kannst du mal schauen ob er die Zertifikate wo anders anleget zb. mit locate oder find.
Verwendest du für das SSL Cert erstellen eine sudo vor dem Befehl oder bist der User root? Glaub sonst hat man nicht die notwendigen Rechte.
Gruß
Christian
danke für die anleitung aber warum bekomme ich jetzt wenn ich extern auf meine cloud zugreifen möchte jetzt nur die apache landing page …??
Hi Harry,
welche URL rufst du den auf? Wenn du nur die IP Adresse eingibst, landest du auf der Landingpage von Apche. Wenn du die Konfiguration so durchgeführt hast wie oben beschrieben, dann musst du /nextcloud hinter die IP schreiben.
Ansonsten melde dich einfach noch mal kurz =)
Gruß
Christian
Hallo Christian,
vielen Dank für die Anleitung.
Leider bekomme ich nach „a2ensite nextcloud-ssl.conf“ die Fehlermeldung „Site nextcloud-ssl does not exist!“.
Fällt Dir dazu eine Lösung ein?
Vielen Dank!
Gruß
Jonas
Hallo Jonas,
ich würde jetzt erstmal auf einen Schreibfehler im Dateinamen tippen.
Versuchst du das mit dem normalen User oder root? Kannst dir auch noch mal die Rechte der Datei anschauen.
Sag kurz bescheid ob das dein Problem löst =)
Gruß
Christian
Bei mir klemmt es auch hier / verstehe nicht wo ich die .conf Datei anlegen muß.
Habe sie aktuell im Ordner ssl erstellt.
Erstellen von nextcloud-ssl.conf
Um das soeben erstelle Zertifikat einzubinden, erstellen wir in /etc/apache2/site-available eine neue Datei mit dem Namen nextcloud-ssl.conf. Diese wird mit einem Editor geöffnet. Anschließend wird die Datei mit dem folgenden Inhalt befüllt.
Wenn ich bekomme ich „a2ensite nextcloud-ssl.conf“ durchführe, bekomme ich auch auch die Fehlermeldung
„Site nextcloud-ssl does not exist!“.
Was mache ich hier falsch
Hallo Christian,
ich habs gefunden.
Ich musste die nextcloud-ssl.conf nach /etc/apache2/sites-available (also plural) verschieben.
Vielen Dank für die Anleitung, jetzt bin ich sicher ;-)
Gruß
Jonas
Hallo, ich habe folgendes Problem, wenn ich auf die Website gehe bekomme ich folgendes angezeigt:
1xx.1×7.2x.x3 hat die Verbindung unerwartet geschlossen.
Versuchen Sie Folgendes:
Verbindung prüfen
ERR_CONNECTION_CLOSED
Manchmal auch
err_ssl_protocol_error
Übrigens, ich kann Apache2 nicht mehr neustarten, hier apache2 Server ausgabe:
● apache2.service – The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since Wed 2019-07-03 09:33:44 EDT; 53s ago
Process: 13454 ExecStop=/usr/sbin/apachectl stop (code=exited, status=1/FAILURE)
Process: 13660 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
Main PID: 13302 (code=exited, status=0/SUCCESS)
Jul 03 09:33:44 new.server.vps systemd[1]: Starting The Apache HTTP Server…
Jul 03 09:33:44 new.server.vps apachectl[13660]: AH00526: Syntax error on line 5 of /etc/apache2/sJul 03 09:33:44 new.server.vps apachectl[13660]: CustomLog takes two or three arguments, a file naJul 03 09:33:44 new.server.vps apachectl[13660]: Action ’start‘ failed.
Jul 03 09:33:44 new.server.vps apachectl[13660]: The Apache error log may have more information.
Jul 03 09:33:44 new.server.vps systemd[1]: apache2.service: Control process exited, code=exited stJul 03 09:33:44 new.server.vps systemd[1]: apache2.service: Failed with result ‚exit-code‘.
Jul 03 09:33:44 new.server.vps systemd[1]: Failed to start The Apache HTTP Server.
lines 1-17/17 (END)
Ich könnte den Fehler beheben, nun habe ich das Problem wenn ich mit https drauf bin bekomme ich die meldung:
Not Found
The requested URL /nextcloud was not found on this server.
Apache/2.4.29 (Ubuntu) Server at 1**.*67.29.8*Port 443
Hi,
Was ist wenn du nur die IP Adresse ohne /nextcloud aufrufst?
Gruß
Christian
Hallo,
bei mir kommt beim Aufruf mit https meine Fritzbox. Obwohl ich eine Weiterleitung auf meinen Server angelegt habe.
Allerdings vergibt er dabei den port 64011
Welchen Port muss man den beim Anlegen der Datenbank eingeben?
Grüße
Hallo,
hat bei mir alles wunderbar geklappt.
Das Zertifikat ist jetzt aber leider abgelaufen.
Was ist zu tun um das Zertifikat zu verlängern? Alles wiederholen?
Hi Stefan,
man kann es auch erneuern, aber ich denke wenn du das ganze einfach noch mal wie in der Anleitung machst ist es am einfachsten.
Am besten benennst du das alte Cert um und erstellst das neue wieder unter dem ursprünglichen Namen.
Dann musst du nur das Cert erneuer und nicht noch die Konfiguration ändern.
Gruß
Christian
Hallo! Ich habe auch ein Problem mit Nextcloud und zwar habe ich diese mit Dietpi auf dem Raspberry pi 4 installiert und bekomme nun die Meldung, daß ich nur mit http darauf zugreife, was muß ich machen um dies zu beheben? Bin leider noch zu sehr Anfänger was den Pi und Nextcloud betrifft, vielleicht hast du eine Idee?
Vielen Dank!
Hi Sören,
hast du die nextcloud-ssl.conf angelegt und aktiviert? Wie versuchst du das ganze aufzurufen?
Gruß
Christian
Danke für die super Anleitung. Hatte keine Fehler bei der Erstellung des Zertifikats,aber wenn ich jetzt die Seite aufrufe dann kommt erst die Meldung mit dem Zertifikat und wenn ich dann weiterklicke und sollte ja nextcloud starten kommt nur das:
Not Found
The requested URL was not found on this server.
Was könnte ich da falsch gemacht habe? Mit http klappt es unter der Adressse.
Danke für deine Hilfe
Hallo Super Anleitung das habe ich gesucht, Danke dafür.
Nach der Instalation kann ich mich wahlweise über http der https mich anwählen.
Wie schalte ich jetzt aber die http ab um nur über die sichere Verbindung zu kommunizieren.
Danke im Voraus für Eure Antworten.
LG
Generell gibt es da mehrere Möglichkeiten.
Du könntest z.b. den Virtual Host der Port 80 verwendet auskommentieren. Dann ist der Aufruf nur noch auf https möglich. Dann bekommst du aber soweit ich weis eine Fehlermeldung wenn du nur http eingibst.
Die andere Möglichkeit ist, wenn jemand http aufruft, diesen aufruf auf https umzuleiten. Da gibt es zwei Möglichkeiten wie man das macht.
Ich finde das dies hier ganz gut beschrieben ist: https://www.tecmint.com/redirect-http-to-https-on-apache/
Ich persönlich bevorzuge die Konfiguration in einer .htaccess Datei.
Hoffe das hilft euch weiter. Ansonsten meldet euch einfach nochmal =)
Danke für so gute Erklehrung,
Wie kann ich jetzt die unsicherre http verbindung abschalten, um nur über https zu kommunizieren.
Danke im voraus für Eure Tipps.
LG
siehe ein Kommentar weiter oben =)
Zunächst mal, danke für die Anleitung!
Ich habe Nextcloud über einen Docker mit einer eigenen IP (mymcvlan) über OMV laufen.
Das ist wahrscheinlich der Grund, warum ich zwei Dinge ändern musste, damit es bei mir läuft:
1. Der Ordner in dem die nextcloud-ssl.conf erstellt werden muss heißt bei mir /etc/apache2/sites-available
2. Der Ordner in der nextcloud-ssl.conf muss bei mir
DocumentRoot /var/www/nextcloud
heißen.
Damit hat es geklappt.
Will Nextcloud nur intern nutzen, allerdings will sich das iPhone nicht damit verbinden, weil es unbedingt eine gesicherte Verbindung benötigt.
Hallo,
danke für die Erklärung, ich bekomme allerdings nach Erstellung und Aktivierung der Zertifikates ebenfalls den gleichen Fehler wie Rene:
Not Found
The requested URL was not found on this server.
Wenn ich in der URL Leiste auf „Nicht sicher“ klicke, wird mein self signed cert auch angezeigt, komme aber leider nicht auf die Nextcloud drauf.
Kann es was damit zu tun haben, dass ich es über Docker auf meiner QnapNas Container Station laufen habe?
Ich habe dem Container 3 Portweiterleitungen gegeben:
– 49160:80
– 49161:8080
– 49162:443
der interne Aufruf aus meinem Netzwerk ist https://qnapnas:49162
Falls du mir helfen könntest wäre ich sehr glücklich :-)
Hallo Christian
alles soweit klar in der Beschreibung,
nur startet die Seite ohne https( ist quasi rot durchgestrichen!)
Bin leider auch kein Experte in solchen Dingen ( bin halt nur DBA!)
Gruss Sylvio
Hallo,
ich bekomme nach dem https Aufruf auch folgende Fehlermeldung:
Forbidden
You don’t have permission to access this resource.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
Apache/2.4.38 (Raspbian) Server at 192.xxx.xxx.xx Port 443
Über http funktioniert wie gewohnt, woran kann das liegen ?