Tutorial für Let's Encrypt Einrichtung über Froxlor

  • Danke für die Rückmeldungen. Ich möchte es schon ohne weitere Tools hinbekommen und verstehen, was ich dort mache.


    Konkret habe ich ein paar Fragen zur Anleitung oben:


    Quote


    Pfad zum SSL-Zertifikat: /etc/ssl/private/apache2.pem

    Pfad zum SSL Private-Key: /etc/ssl/private/apache2.key

    Wo kommen diese beiden Dateien her?


    Quote

    openssl genrsa -out /etc/ssl/private/apache.key 2048

    openssl req -new -x509 -key /etc/ssl/private/apache.key -days 365 -sha256 -out /etc/ssl/certs/apache.crt

    Welche Schlüssel werden hier erstellt und zu welchem Zweck? Hängen sie irgendwie mit den apache2.xxx Dateien zusammen, deren Pfad bei Froxlor eingetragen wird?

  • Es muss zuerst ein eigenes Zertifikat angelegt werden. Das wird mit openssl gemacht.
    Unter Punkt eins meiner Anleitung wird dies vollzogen.


    1. In der Konsole SSH folgendes eingeben:
      openssl genrsa -out /etc/ssl/private/apache.key 2048
      openssl req -new -x509 -key /etc/ssl/private/apache.key -days 365 -sha256 -out /etc/ssl/certs/apache.crt
      Den Pfade „/etc/ssl/private/apache.key“ brauchen wir später noch!
    Quote

    Webhosting Spezial Mini Aktion +++ Webhosting 8000 SE Aktion

    VPS 200 G8 +++ Root-Server Spring 2019

  • Es muss zuerst ein eigenes Zertifikat angelegt werden. Das wird mit openssl gemacht.
    Unter Punkt eins meiner Anleitung wird dies vollzogen.

    Pardon, wenn ich mich einmenge, aber warum brauchen wir dieses Zertifikat?

    Der Fall, dass eine eigene CA und ein Key Signing Request, respektive ein selbstsignierter Key benötigt würde, ist bei einer Froxlor-Installation, die Letsencrypt verwendet, üblicherweise eigentlich ja gerade nicht erforderlich, es sei denn, man möchte die abzusichernde Website nur temporär via HTTPS absichern, um auf diesem Weg den Certbot zur einer Verifikation zu bemühen. Würde es nicht auch genügen, den auf Port 80 lauschenden Server mittels ACME-Verzeichnis zur Verfizierung laufen zu lassen? Man muss in diesem Fall ja auch nicht nach HTTPs umleiten.

  • Habe einmal versucht das umzusetzen. Jetzt habe ich Letencrypt dazu bekommen, 3 Dateien zu erzeugen:

    Quote

    /etc/ssl/froxlor-custom/<meine domain>.de_chain.pem

    /etc/ssl/froxlor-custom/<meine domain>_fullchain.pem

    /etc/ssl/froxlor-custom/<meine domain>_CA.pem

    Eine privkey Datei habe ich nicht.


    Dann habe ich zumindestens einen symbolischen Link eingefügt, der auf die Datei /etc/ssl/froxlor-custom/<meine domain>_fullchain.pem zeigt und eben den Eintrag im Froxlor befriedigt, also /etc/ssl/private/apache2.pem heißt.


    Im System-Log unter Froxlor finde ich beim Ausführen des cronjobs, dann aber:


    Quote


    certificate file "/etc/ssl/private/apache2.pem" does not exist! Cannot create ssl-directives

    Habe auch einmal versucht den Pfad in Froxlor direkt auf die fullchain.pem zu setzen, aber dann ändert sich eben auch nur der Pfad in der System-Log, an dem das System das certificate file nicht finden kann.


    Was genau muss ich in die beiden Pfad Angaben schreiben?


    Diese beiden Einträge scheinen nicht zu stimmen:


    Pfad zum SSL-Zertifikat: /etc/ssl/private/apache2.pem

    Pfad zum SSL Private-Key: /etc/ssl/private/apache2.key


  • Bin wieder ein Stück weiter. Habe noch einmal im Verzeichnis /etc/ssl/froxlor-custom/ nachgeschaut und neben den 3 oben genannten Dateien gibt es noch 2 weitere Datein <meine domain>.crt und <meine domain>.key


    Diese scheinen doch genau das zu sein, was ich benötige!


    Deshalb habe ich diese Dateinamen inkl. Pfad jetzt eingetragen. Das System findet diese noch nicht. Kann das an den Berechtigungen liegen?


    Quote

    -rw------- 1 root root 2273 Feb 1 19:20 <meine domain>.de.crt

    Die Datei gehört root und kann nur von solchen Mitgleidern gelesen und geschrieben werden. Ist das ok?

  • So, habe es jetzt im wesentlichen auf Basis des Artikels auf nichteinschalten.de und mit Zusatzinformationen durch Eure Beiträge hinbekommen.


    Habe den Server jetzt so eingerichtet, dass er das DreamFactory Framework über https zur Verfügung stellt und mir eine REST API auch für Firebird Datenbanken zur Verfügung stellt. ?


    Ich werde versuchen noch einmal eine kommentierte Anleitung zur Verfügung zu stellen, wie Froxlor und Letsencrypt eingerichtet werden können.

  • Nachdem es bisher kein "Tutorial" zu diesem Them gab, versuche ich mich einmal daran, eine Anleitung zu schreiben und zu kommentieren.

    Ich denke viele sehen die Notwendigkeit einen gesicherten Zugang zu einigen Domains mit Froxlor einzurichten.


    Die wesentlichen Schritte die notwendig sind, sind hier gut beschrieben.


    Deshalb werde ich mich an dieser Beschreibung entlang bewegen:


    Quote

    Schritt 1

    Letsencrypt wird direkt als Admin in Froxlor unter Einstellungen => SSL Einstellungen aktiviert. In der Übersicht der Einstellungen natürlich auch noch SSL aktiv schalten.

    Man geht dazu in das Froxlor Server Management Panel und wählt auf der linken Seite unter System den Eintrag Einstellungen, dort findet man dann recht weit oben SSL Einstellungen, bei denen normalerweise noch aktiviert: Nein steht. Das Nein ändert man zu Ja. Dann erscheint rechts in der Zeile ein neuer Eintrag Einstellungen. Das klickt man an und kommt so zu den SSL-Einstellungen. Dort sind 3 Änderungen zu machen:


    1. Aktiviere SSL

      Erlaubt die Nutzung von SSL für den Webserver -> hier den Eintrag aktivieren
    2. Pfad zum SSL-Zertifikat

      Geben Sie den Pfad inklusive Dateinamen des Zertifikats an (meist .crt or .pem). -> Hier habe ich /etc/ssl/private/myDomain.de.crt gewählt

      Kommentar: zunächst müsst Ihr natürlich myDomain.de durch eure Domain ersetzen. Ist die Wahl des Verzeichnis richtig? Dieses Verzeichnis erlaubt Zugriff der Gruppe ssl-cert:

      drwx--x--- 2 root ssl-cert 4096 Feb 1 22:30 private

      Das spricht dafür. Andererseits wird später der Letsencrypt Schlüssel erzeugt (5 Dateien), aber in einem anderen Verzeichnis /etc/ssl/froxlor-custom abgelegt, welches root / root gehört. Ich habe deshalb die crt Datei (dazu später mehr) von froxlor-custom nach private kopiert. Ob auch ein Link funktioniert weiß ich nicht. Wenn es funktioniert, wäre das gut, weil man ansonsten alle 3 Monate, wenn ein neuer Schlüssel über den cronjob erzeugt wird. Wieder eine Kopie gemacht werden muss.
    3. Pfad zum SSL Private-Key

      Geben Sie den Pfad inklusive Dateinamen der Schlüssel-Datei an (der private-key, meist .key). -> Hier habe ich /etc/ssl/private/myDomain.de.key gewählt

      Kommentar: wie in Punkt 2


    Zusätzlich zu diesem Schritt würde ich gleich noch den Port anlegen:


    Dazu im Froxlor Panel links unter Ressourcen IPs und Ports wählen.


    Dort IP/Port hinzufügen wählen und dort die IP eintragen (die auch für Port 80 benutzt wird und die ihr von netcup erhalten habt) und als Port 443 eintragen (Standard https Port). Zusätzlich sind noch 3 Einträge zu machen unter Webserver-SSL-Konfiguration:


    1. Ist dies ein SSL-Port? -> Ja anklicken
    2. Pfad zum Zertifikat: den gleichen Pfad wie oben unter Punkt 2 eintragen (/etc/ssl/private/myDomain.de.crt)
    3. Pfad zum SSL-Private-Key: wie oben unter Punkt 3 (/etc/ssl/private/myDomain.de.key)

    Einträge speichern!


    Fortsetzung folgt im nächsten Beitrag.

  • Fortsetzung

    Aus nichteinschaltend.de:


    Quote

    Schritt 2 und 3

    Unter Konfiguration nun die Distribution auswählen (hier Debian 8), den Service (hier Webserver) und die konkrete Anwendung, die auf dem Server installiert ist (hier Apache2). Eine neue Konfigurationsdatei acme.conf ist verfügbar und muss unter dem angegebenen Pfad angelegt werden: /etc/apache2/conf-enabled/acme.conf

    Ich habe bei mir im Froxlor Panel unter System Konfiguration gewählt. Unter


    • Distribution: Debian Stretch (9.x)
    • Service: Webserver (HTTP)
    • Daemon: Apache 2.4 (standard)

    Starten auswählen:


    Bei mir steht dort man soll folgende Befehle auf der ssh Konsole eingeben:


    • apt-get install apache2

    Das würde den Apache2 Server installiert und ist bei den meisten nicht notwendig. Wenn ihr den Befehl trotzdem eingebt, wird das System eine entsprechende Meldung ausgeben.


    Dann folgt:

    • mkdir -p /etc/apache2/sites-enabled/
    • chown root:0 /etc/apache2/sites-enabled/
    • chmod 0600 /etc/apache2/sites-enabled/

    Mit diesen 3 Befehlen würde ein Verzeichnis /etc/apache2/sites-enabled erstellt und die Rechte vergeben werden. Sollte bei euch ein solches Verzeichnis schon existieren (auf der Konsole nachschauen) könnt ihr die Schritte weglassen.

    • mkdir -p /etc/apache2/sites-enabled/
    • chown root:0 /etc/apache2/sites-enabled/
    • chmod 0600 /etc/apache2/sites-enabled/

    Trotz mehrfachen Überprüfens finde ich keinen Unterschied zu den ersten 3 Befehlen. Also weglassen!

    • mkdir -p /var/customers/webs/
    • mkdir -p /var/customers/logs/
    • mkdir -p /var/customers/tmp
    • chmod 1777 /var/customers/tmp

    Auch hier werden Verzeichnisse erstellt und Rechte vergeben. Aber auch diese 3 Verzeichnisse existieren in der Regel bereits. Dann können diese Befehle auch weggelassen werden.

    • a2dismod userdir

    a2dismod deaktiviert Module des Apache2 Servers. Hier wird ausgeschaltet, dass einem user automatisch ein Verzeichnis zugewiesen wird. Diesen Befehl eingeben.

    • a2enmod headers

    a2enmod aktiviert Module für Apache. Diesen Befehl eingeben.

    • a2enmod ssl

    Und das ist wichtig: Aktivieren des ssl Moduls für Apache.


    Anschließend mit dem Lieblingseditor die Konfigurationsdatei öffnen:


    • /bin/nano /etc/apache2/conf-enabled/acme.conf

    Wenn nano installiert ist, kann in der Rege auch das /bin weggelassen werden, einfach: nano /etc/apache2 ...


    In diese Datei einfach folgendes hineinkopieren:


    Quote

    Alias "/.well-known/acme-challenge" "/var/www/froxlor/.well-known/acme-challenge"

    <Directory "/var/www/froxlor/.well-known/acme-challenge">

    Require all granted

    </Directory>

    Und in nano mit "ctrl o" die Datei speichern und mit "crtl x" verlassen.


    jetzt noch Apache2 Neustart:


    • /etc/init.d/apache2 restart

    Die meisten hier gezeigten Befehle benötigen root Rechte. Wenn ihr einen anderen user mit sudo Rechten benutzt, muss den meisten Befehlen sudo vorangestellt werden.


    In meinem langen Weg zu einem erfolgreichen Setup, ist es mit immer wieder passiert, dass der Apache Server sich nicht mehr starten ließ! Das meldet der Befehl /etc/init.d/apache2 restart dann auch sofort zurück. Dabei gibt er auch an, in welchen beiden log Dateien man zusätzlich Infos bekommt. Diese bitte (ggf. mit sudo) so eingeben, wie in der Rückmeldung steht. In der Regel gab es bei mir falsche Einstellungen in Froxlor. Da aber der Apache2 jetzt nicht läuft, kommt man auch nicht mehr in Froxlor rein.


    Deshalb liegt die Lösung (fast) immer in dem Verzeichnis /etc/apache2/sites-enabled. Hier legt Froxlor alle Konfigurationen der Domains ab. Und wenn in den Log Dateien steht, dass hier z.B. ein Eintrag in einer dieser Dateien steht, der zu einem Fehler führt, z.B. in der Datei


    35_froxlor_ssl_vhost_myDomain.de.conf


    dann diese Datei mit


    • sudo nano


    anpassen oder mit


    • sudo mv 35_froxlor_ssl_vhost_myDomain.de.conf 35_froxlor_ssl_vhost_myDomain.de.conf.hide


    umbenennen, damit apache2 beim Restart diese Datei nicht mehr findet. Er schaut nur nach .conf Dateien.


    Mit diesen beiden Methoden konnte ich dann Apache2 immer wieder starten, dann in Froxlor rein und dort die Einstellungen korrigieren, denn ansonsten wird nach dem nächsten cronjob die conf Datei wieder falsch geschrieben.


    Fortsetzung folgt

  • Fortsetzung


    wieder aus nichteinschaltend.de:

    Quote

    Letsencrypt verwenden

    Anschließend in den Einstellungen einer Domain den Port 443 für die jeweilige IP Adresse auf der die Domain auch unter Port 80 läuft aktivieren. Den Haken bei Letsencrypt setzen und ganz wichtig: kein Alias auswählen, da Letsencrypt kein Wildcard kann. Ich würde WWW empfehlen, damit in das Zertifikat auch die Subdomain www. eingetragen wird.


    Dazu also im Froxlor Panel Ressourcen Domains auswählen. Unter der gewünschten Domain den Bleistift unter Optionen anklicken, um zu den Einstellungen zu gelangen. Dort unter Webserver SSL-Einstellungen


    • SSL-IP-Adresse(n):

      Definiere eine oder mehrere IP-Adresse(n) für diese Domain. -> hier die vorgegebene IP mit Port :443 auswählen
    • SSL Zertifikat erstellen (Let's Encrypt):

      Holt ein kostenloses Zertifikat von Let's Encrypt. Das Zertifikat wird automatisch erstellt und verlängert.

      ACHTUNG: Wenn Wildcards aktiviert sind, wird diese Option automatisch deaktiviert. Dieses Feature befindet sich noch im Test -> anwählen, damit ein Letsencrypt Schlüssel generiert wird.


    Einträge sichern und warten!


    Warum warten? Mit dem "SSL Zertifikat erstellen" oben, wird ein cronjob erstellt, der erstmalig und dann alle 3 Monate ein neues Zertifikat für diese domain erstellt. Diese wird erst nach 5 (-15) Minuten ausgeführt. Wenn man aber -wie ich- die Nerven verliert, kann man wie unter nichteinschaltend.de beschrieben auch noch folgende Befehle eingeben:


    Quote

    php /var/www/froxlor/scripts/froxlor_master_cronjob.php --force --debug
    php -q /var/www/froxlor/scripts/froxlor_master_cronjob.php --letsencrypt --debug


    Dort bitte auch genau lesen, ob alles funktioniert hat. Bei mir wurde beim Ausstellen des ersten Zertifikats noch einige Fragen gestellt, nach Domain, E-Mail Adresse und so. Diese habe ich nach bestem Wissen beantwortet. :)


    Wenn alles funktioniert hat, entstehen 5 Dateien:


    Quote

    -rw------- 1 root root 1647 Feb 1 22:28 myDomain.de_CA.pem

    -rw------- 1 root root 1647 Feb 1 22:28 myDomain.de_chain.pem

    -rw------- 1 root root 2269 Feb 1 22:28 myDomain.de.crt

    -rw------- 1 root root 3917 Feb 1 22:28 myDomain.de_fullchain.pem

    -rw------- 1 root root 3272 Feb 1 22:28 myDomain.de.key

    Mit dem Befehl sudo cp habe ich dann die .crt und .key Datei nach /etc/ssl/private kopiert. Hier wäre interessant, ob auch ein symbolischer Link funktioniert. Das hatte ich einmal probiert, hatte aber nicht funktioniert, kann aber auch noch an einem anderen Fehler gelegen haben.


    Noch ein Hinweis: solltet ihr eine Firewall verwenden z.B. ufw, dann noch den Port 443 für alle IPs freischalten.


    Nach diesen Schritten ist meine Domain jetzt unter https erreichbar. :thumbup:


    Neben der Frage des Links vs. einer Kopie der beiden Schlüsseldateien, habe ich noch folgenden offenen Punkt. Da ich "nur" eine IP habe, nutzt meine Domain dieselbe IP wie z.B. Froxlor. Wenn ich also mineIP/froxlor eingebe und ganz frech einfach ein https davor setze, stellt der Browser fest, dass der Schlüssel zu dieser IP auf myDomain.de ausgestellt ist und verweigert den Zugriff. Da ich aber weiß, dass dieser Schlüssel richtig ist, habe ich eine Ausnahme hinzugefügt und kann jetzt auch Froxlor unter https erreichen. Schöner wäre natürlich ein korrekter Schlüssel dazu. Wie das geht, darf gerne jemand anderes beschreiben. ;)

  • Da ich aber weiß, dass dieser Schlüssel richtig ist, habe ich eine Ausnahme hinzugefügt und kann jetzt auch Froxlor unter https erreichen. Schöner wäre natürlich ein korrekter Schlüssel dazu. Wie das geht, darf gerne jemand anderes beschreiben.

    Das Zertifikat lautet auf den Hostnamen und nicht auf die IP-Adresse - daher wird bei Eingabe der IP-Adresse immer eine Zertifikatswarnung erscheinen müssen. Bei Eingabe des eigenen Hostnamens (wenn man dafür ein Zertifikat mit angefordert hat), wird das hingegen funktionieren.


    Den Rest der Anleitung habe ich nur überflogen - schaut aber gut aus.


    Anmerkung: mod_http2 vielleicht noch aktivieren?

  • Hallo eripek,


    natürlich habe ich froxlor auch schon über https://vxxxxxxxxxxxxxxxx.supersrv.de/froxlor/ also der mir von netcup zugewiesenen vhost Nummer aufgerufen, also mit einem Domain Namen, dieser ist aber eben nicht myDoamin.de. Deshalb wäre es interessant, ob und ggf. wie ich auch für diese Domain einen Letsencrypt Key erstellen lassen kann und das ggf. mit Froxlor verwalten kann.


    Quote


    Anmerkung: mod_http2 vielleicht noch aktivieren?

    Habe ich nicht gebraucht bzw. es war vielleicht schon aktiviert.

  • natürlich habe ich froxlor auch schon über https://vxxxxxxxxxxxxxxxx.supersrv.de/froxlor/ also der mir von netcup zugewiesenen vhost Nummer aufgerufen, also mit einem Domain Namen, dieser ist aber eben nicht myDoamin.de. Deshalb wäre es interessant, ob und ggf. wie ich auch für diese Domain einen Letsencrypt Key erstellen lassen kann und das ggf. mit Froxlor verwalten kann.

    diese v123456789.supersrv.de wird dir irgendwann um die Ohren fliegen. Spätestens wenn supersrv.de auf einer blacklist landet. Das musst nicht du verschuldet haben, sondern es reicht wenn ein anderer Kunde mit der selben TLD dies verursacht. Dies kam in letzter Zeit ein paar mal mit netcup.de vor, worauf hin dass CCP nicht erreichbar war.

    Was spricht gegen eine eigene Domain für den Server, oder Subdomain deiner vorhandenen Domain?


    Symlinks müssten eigentlich gehen da LE (ohne froxlor) die eigentlichen Zertifikate selbst aus archive in live linkt.


    Allerdings hatte ich Schwierigkeiten die Zertifikate der Serverdomain mit froxlor verwalten zu lassen und habe mir dafür certbot und ein cron eingerichtet um die Zertifikate regelmässig erneuern zu lassen.

    It's me, only me, pure michi 🦆

    RS 1000 SAS G8 | Cyber Quack

    VPS: 50 G7 |B Ostern 2017|200 | Karneval | piko

    WH: SmallEi | Adv17 Family |4000 SE|1000 SE

  • Das ist ein interessanter Ansatz, Froxlor in eine Subdomain meine Domain auszulagern. Wie müsste ich dazu vorgehen, wenn ich eine neue Subdomain angelegt habe?

  • froxlor hatte eine Option "Froxlor über den Hostnamen verfügbar machen."

    Leider finde ich die gerade nicht wieder im aktuellen Froxlor.

    Aber unter Einstellungen/Systemeinstellungen kannst du den Hostnamen

    eintragen:

    Hostname

    Welchen Hostnamen hat der Server?ich denke das ist die aktuelle Einstellung dafür.

    Hier solltest du deine sub.domain.de eintragen

    und dann den Hostnamen des Server auf die sub.domain.de ändern und neu starten.


    eigentlich müsste das alles sein....

    It's me, only me, pure michi 🦆

    RS 1000 SAS G8 | Cyber Quack

    VPS: 50 G7 |B Ostern 2017|200 | Karneval | piko

    WH: SmallEi | Adv17 Family |4000 SE|1000 SE

  • Hallo, danke für Tutorial, bin halt nur auf folgendes gestoßen. Wo werden die Dateien abgelegt?


    Quote

    -rw------- 1 root root 1647 Feb 1 22:28 myDomain.de_CA.pem

    -rw------- 1 root root 1647 Feb 1 22:28 myDomain.de_chain.pem

    -rw------- 1 root root 2269 Feb 1 22:28 myDomain.de.crt

    -rw------- 1 root root 3917 Feb 1 22:28 myDomain.de_fullchain.pem

    -rw------- 1 root root 3272 Feb 1 22:28 myDomain.de.key

  • Hallo, danke für Tutorial, bin halt nur auf folgendes gestoßen. Wo werden die Dateien abgelegt?

    Ich bin mir nicht mehr ganz sicher aber ich glaube unter "Einstellungen -> SSL Einstellungen" zeigt Froxlor die Verzeichnisse an wo die Zertifikate gespeichert werden.


    Alternativ kannst die die erstellten Zertifikate auch per shell suchen


    find /etc -iname 'mydomain*' | egrep '\.(pem|crt|key)$'


    <mydomain> ist durch deine Domain zu ersetzten.

  • An dieser Stelle ein Hinweis für alle jene, die nach dem Upgrade auf ACME v2 Probleme mit spezifischen Usern haben:

    Manche für's Renewal von Kundendomains erforderliche Informationen landen in der Datenbank - konkret in panel_users - das sind die Felder lepublickey, leprivatekey, leregistered und leaccount. Sollte beim Umstellen auf ACME v2 das Renewal versagen, kann es an diesen Challenges liegen. Vor dem Erneuern einfach die Einträge wegsichern und die Felder des betroffenen Users leeren.

    Siehe auch :https://forum.froxlor.org/inde…ts-matching-provided-key/

  • Code
    find /etc -iname 'virsus-rp*' | egrep '\.(pem|crt|key)$'
    Quote

    /etc/ssl/private/mydomain.de.key

    /etc/ssl/private/mydomain.de.crt

    es wurden nur die Zertifikate gefunden, die ich selbst erstellt habe.


    Code
    openssl genrsa -out /etc/ssl/private/mydomain.de.key 2048openssl req -new -x509 -key /etc/ssl/private/mydomain.de.key -days 365 -sha256 -out /etc/ssl/private/mydomain.de.crt


    wenn ich benutze

    Quote

    php /var/www/froxlor/scripts/froxlor_master_cronjob.php --force --debug
    php -q /var/www/froxlor/scripts/froxlor_master_cronjob.php --letsencrypt --debug