Let's Encyrpt Zertifikat lässt sich nicht erneuern

Hallo nochmal,

in der Datei

root@raspberrypi-iob:/etc/apache2# pwd
/etc/apache2
root@raspberrypi-iob:/etc/apache2# cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

#Listen 808
Listen 80

<IfModule ssl_module>
        #Listen 4433
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        #Listen 4433
        Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

waren noch ports 808 und 4433 angegeben. Die habe ich wie oben geändert in 80 und 443. Danahc habe ich versucht, den apache-server neu zu starten, was fehl schlug. Könnt ihr was damit anfangen?

● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2021-10-30 19:38:08 CEST; 11s ago
     Docs: https://httpd.apache.org/docs/2.4/
  Process: 2109 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)

Okt 30 19:38:08 raspberrypi-iob systemd[1]: Starting The Apache HTTP Server...
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:443
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:443
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: no listening sockets available, shutting down
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: AH00015: Unable to open logs
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: Action 'start' failed.
Okt 30 19:38:08 raspberrypi-iob apachectl[2109]: The Apache error log may have more information.
Okt 30 19:38:08 raspberrypi-iob systemd[1]: apache2.service: Control process exited, code=exited, status=1/FAILURE
Okt 30 19:38:08 raspberrypi-iob systemd[1]: apache2.service: Failed with result 'exit-code'.
Okt 30 19:38:08 raspberrypi-iob systemd[1]: Failed to start The Apache HTTP Server.

OK, das Problem war noch, dass der Port 443 doppelt belegt war. Das habe ich nun geändert. Nun komme ich mit einer Port Weiterleitung der FritzBox 443 auf intern 443 weiter. Alles funktioniert, aber das Let’s encrypt Zertifikat lässt sich leider immer noch nicht erneuern. Es kommt (die gleiche) Fehlermeldung wie vorher:


Automatic signed SSL certificates. Let’s Encrypt is a free, automated, and open Certificate Authority.
Internet access is required for this configuration to complete
Both ports 80 and 443 need to be accessible from the internet

Your certificate will be automatically renewed every month

Active	
Domain	
Additional domain	
Email	
[ letsencrypt ] (Sat Oct 30 20:47:17 CEST 2021)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for dyndns
Using the webroot path /var/www/nextcloud for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. dyndns (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://dyndns/.well-known/acme-challenge/-xxx [79.250.135.92]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"
IMPORTANT NOTES:
- The following errors were reported by the server:

Domain: dyndns
Type: unauthorized
Detail: Invalid response from
http://dyndns/.well-known/acme-challenge/-xxx
[79.250.135.92]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
2.0//EN\">\n<html><head>\n<title>404 Not
Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.

Naja da ich vermute, dass du nicht die globale Domain dyndns (ohne tld) besitzt. Daher müsstest du lets encrypt deine korrekte Domain angeben.

Hallo REAPERSbattlecry

Natürlich besitze ich die dyndns Adresse nicht. Das ist eine angelegte dyndns Adresse. Was gibt man denn da an?

In nextcloudpi kann ich ja nur die Felder Domain, Additional Domain und Email Adress angeben. Ich habe immer nur Domain angegeben.

Du musst die vollständige DynDNS-Adresse angeben, die du bei deinem DynDNS Abieter angelegt hast. Das würde dann ungefähr so aussehen…

dein-dyndns-name.dyndns.net

Eben weil Du diese Dyndns-Adresse nicht besitzt, schlägt die Zertifikat-Registrierung fehl, weil die Validierung beim Anbieter landet.

Ich habe bei meinem DynDNS-Anbieter eine eigene Domain (blabla.de) registriert und leite diese (A- und MX-Records) auf “meine” DynDNS-Adresse (blabla.dyndns-anbieter.eu) weiter. - So wird meine Domain mit dem Letsencrypt-Zertifikat versehen.

Das ist natürlich die schönere Variante. Man kann aber auch ein Zertifikat für “blabla.dyndns-anbieter.eu” beziehen. Das Zertifikat ist dann natürlich nur für “blabla.dyndns-anbieter.eu” gültig und nicht für “*.dyndns-anbieter-eu”.

OK, ich versuche mal zu erklären, was ich hier habe:

ich habe meine dyndns schon vor sehr langer Zeit angelegt. Ich denke, damals über die FritzBox. Das weiss ich nicht mehr genau. Jedenfalls ist die DynDNS Adresse aufgebaut: fritz.dyndns.info

Gebe ich die an, komme ich auf die nextcloud (mittlerweile noch, aber das Zertifikat läuft bald aus). Ich habe es also schonmal geschafft, ein Lets Encrypt Zertifikat zu beziehen. Leider weiss ich nicht mehr, wie ich das gemacht habe. Ich bin also angeschrieben worden von Lets Encrypt, dass das Zertifikat ausläuft:

Hello,

Your certificate (or certificates) for the names listed below will expire in 10 days (on 06 Nov 21 04:04 +0000). Please make sure to renew your certificate before then, or visitors to your web site will encounter errors.

We recommend renewing certificates automatically when they have a third of their total lifetime left. For Let’s Encrypt’s current 90-day certificates, that means renewing 30 days before expiration. See https://letsencrypt.org/docs/integration-guide/ for details.

fritz.dyndns.info

Hier ist die Konfiguration meiner dyndns Einstellung zu sehen:

Unbenannt

Ich verstehe nicht, warum es einst geklappt hat und nun über den Standard nextcloudpi Let’s encrypt Weg nicht mehr.

OK, wenn ich das irgendwie anders aufsetzen muss: eine eigene Domain habe ich. Da könnte ich eine subdomain anlegen. Aber wie verbinde ich dann den dyndns Dienst über die Domain mit meiner nextcloud?

Das weiss ich leider auch nicht. Normalerweise sollten die Zertifikate automatisch erneuert werden. Vielleicht irgendein Problem mit certbot auf deiner NextcloudPi Installation. In deinen Logs und configs, die du gepostet hast steht nur “dyndns” und nicht "dein-name.dyndns.info drinn. Hast du das abgeändert bevor du es gepostet hast oder steht das wirklich so drinn?

Du musst bei deinem Registrar einen CNAME record setzten, der auf “dein-name.dyndns.info” weiterleitet.

Beispiel:

cloud.deinedomain.de   IN	CNAME	dein-name.dyndns.info

Hallo bb77,

Danke für deine Tipps und deine Geduld.

In deinen Logs und configs, die du gepostet hast steht nur “dyndns” und nicht "dein-name.dyndns.info drinn. Hast du das abgeändert bevor du es gepostet hast oder steht das wirklich so drinn?

Nein, die logs habe ich vorher editiert. Es steht schon immer fritz.dyndns.info drin.

Ganz verstehe ich die Zusammenhänge noch nicht. In meiner eigenen Web-Domain (die erstmal gar nichts mit nextcloud zu tun hat) ist in der Tat ein Record drin:

Unbenannt

Ich hatte vor längerer Zeit mein NAS mit einem Lets Encrypt Zertifikat beglückt. Deswegen steht da diskstation drin. Aber das ist doch nur ein Name, oder?

Ich gehe davon aus dass es eine Subdomain von deiner Domain ist, also diskstation.deinedomain.de daraus wird. Falls nicht würde dieser Eintrag keinen Sinn machen und das Verwaltungstool würde bzw sollte den Eintrag dann auch nicht akzeptieren.

Du könntest jetzt dort einen weiteren identischen Eintrag hinzufügen und ihn “nextcloud” oder “cloud” nennen. Das ergäbe dann nextcloud.deinedomain.de bzw. cloud.deinedomain.de.

Hallo bb77,

das habe ich gemacht: subdomain angelegt: nextcloud.mydomain.de
Record angelegt:
nextcloud.mydomain.de CNAME fritz.dyndns.info

Leider bei nextcloudpi die gleiche Fehlermeldung beim Zertifikat verlängern:

[ letsencrypt ] (Sun Oct 31 15:13:58 CET 2021)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for fritz.dyndns.info
Using the webroot path /var/www/nextcloud for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. fritz.dyndns.info (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://fritz.dyndns.info/.well-known/acme-challenge/xxx [79.250.140.197]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>404 Not Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"
IMPORTANT NOTES:
- The following errors were reported by the server:

Domain: fritz.dyndns.info
Type: unauthorized
Detail: Invalid response from
http://fritz.dyndns.info/.well-known/acme-challenge/xxxx
[79.250.140.197]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
2.0//EN\">\n<html><head>\n<title>404 Not
Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.

Ich verstehe es nicht, warum das nicht geht. Kann man denn nicht irgendwelche Logs ansehen, was genau schief geht?

PS: nextcloudpi zeigt immer noch an, dass Ports 80 und 443 geschlossen seien, obwohl ich doch von aussen sowohl über Port 80 (auf den apache server) als auch über 443 auf die nextcloud zugreifen kann. Nicht, dass da noch ein anderes Problem drin ist.

Ich habe auch diesen Hinweis beim Anlegen meines DNS Records übersehen:

Bitte beachten Sie, dass es bis zu 48 Stunden dauert, bis die Änderung weltweit bekannt ist.

Wahrscheinlich muss ich nochmal ein paar Stunden warten, oder?

Sorry, da haben wir mit der Diskussion “dyndns Domain vs. eigene Domain” offenbar für mehr Verwirrung gesorgt, als wir zur Lösung des Problemes beigetragen haben :wink:

Das nützt dir bei deinem jetztigen Problem nichts. Das wäre aber eine Option, wenn du deinen Domainnamen, anstatt den dyndns.info Domainnamen für deine Nextcloud verwenden willst. Dafür müsstest du aber dann die Domain in Nextcloud Pi hinzufügen bzw. ändern und neue Zertifikate beziehen.

Da haben wir sehr warscheinlich das Problem gefunden. Der Server muss zwingend über Port 80 erreichbar sein, um die Zertifikate erneuern zu können, sprich Port 443 und Port 80 müssen auf den Pi bzw. NexcloudPi weitergeleitet werden, damit es funktioniert.

Erstens dieses und zweitens:
Solltest Du mittlerweile den Zugriff über myfritz auf Deinen Router eingerichtet haben, so belegt dieser standardmäßig ebenfalls Port 80 und 443, was einen Zugriff auf Nextcloud gänzlich unmöglich macht, wenn Du die Ports für myFritz nicht geändert haben solltest.
Dann landen nämlich alle Anfragen in Deiner Fritzbox und werden nicht an Deinen Nextcloud-Server weitergeleitet.

P.S.: Ich schließe mich der Entschuldigung bei b77 an.

1 Like

Hallo bb77. Das sind sie doch. Wie ich schon geschrieben habe, komme ich über fritz.dyndns.info auf meine nextcloud → heisst: port 443 ist offen. Schlussfolgerung richtig?

Über http://fritz.dyndns.info:80 bekomme ich direkt eine Umleitung auf https://fritz.dyndns.info

Hier sieht man die Portweiterleitungen in der FritzBox:
Unbenannt

Hier sieht man, dass die Ports angeblich geschlossen wären:

Myfritz ist eingerichtet, aber ich denke, es ist ein anderer Port als 443. Wie ich den Port 80 verbiegen könnte, weiss ich nicht - wird der überhaupt benutzt?

So sieht nun meine config.php von der nextcloud aus - seht ihr etwas auffälliges?

root@raspberrypi-iob:/var/www/nextcloud/config# cat config.php
<?php
$CONFIG = array (
  'passwordsalt' => 'xxx',
  'secret' => 'xxx',
  'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '192.168.178.19',
    2 => 'cloud.mydomain.de',
    3 => 'fritz.dyndns.info',
    4 => 'nextcloudpi.local',
    5 => 'nextcloudpi',
    6 => 'nextcloudpi.lan',
    14 => 'raspberrypi-iob'
  ),
  'datadirectory' => '/var/www/nextcloud/data',
  'dbtype' => 'mysql',
  'version' => '21.0.4.1',
  'overwriteprotocol' => 'https',
  'overwrite.cli.url' => 'https://fritz.dyndns.info/',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'mysql.utf8mb4' => true,
  'dbuser' => 'ncadmin',
  'dbpassword' => 'xxx',
  'installed' => true,
  'instanceid' => 'ocerw4in4l88',
  'memcache.local' => '\\OC\\Memcache\\Redis',
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' =>
  array (
    'host' => '/var/run/redis/redis.sock',
    'port' => 0,
    'timeout' => 0.0,
    'password' => 'xxx',
  ),
  'tempdirectory' => '/var/www/nextcloud/data/tmp',
  'mail_smtpmode' => 'smtp',
  'mail_smtpauthtype' => 'LOGIN',
  'mail_from_address' => 'mail',
  'mail_domain' => 'mydomain.de',
  'loglevel' => '2',
  'log_type' => 'file',
  'twofactor_enforced' => 'true',
  'twofactor_enforced_groups' =>
  array (
  ),
  'twofactor_enforced_excluded_groups' =>
  array (
  ),
  'allow_local_remote_servers' => true,
  'maintenance' => false,
  'htaccess.RewriteBase' => '/',
  'mail_sendmailmode' => 'smtp',
  'mail_smtpsecure' => 'ssl',
  'mail_smtpauth' => 1,
  'mail_smtphost' => 'xxx.netcup.net',
  'mail_smtpport' => '465',
  'mail_smtpname' => 'mail@mydomain.de',
  'mail_smtppassword' => 'xxx',
  'trusted_proxies' =>
  array (
    11 => '127.0.0.1',
    12 => '::1',
    13 => 'fritz.dyndns.info',
    14 => '79.483.638.13',
  ),
);

noch ein Hinweis: schreibrechte müssen für das überschreiben der zertifikate vorhanden sein. ggf. mal prüfen

Jup das sieht gut aus.

Indem du zwei sperate Einträge, wie auf deinem Screenshot erstellst, einen für Port 80 und einen für 443, die auf die interne IP Adresse des Pi forwarden. Auf deinem Screenshot sehe ich nur die externe IP Adresse.