NEWS
[gelöst] https + letsencrypt will einfach nicht laufen
-
Ich hab aktuell noch ein Problem mit meinem iobroker in Verbindung mit https + letsencrypt. Die iobroker läuft auf einer synology DS218+ die ebenfalls mit https abgesichert ist und ein eigenes letsencrypt Zertifikat hat (sollte zwar nichts zu Sachen tun aber vorsichtshalber wollte ich es mal erwähnen).
Nun hab ich im admin adapter https und auth angeschaltet.
Danach hab ich versucht mich zu verbinden, das ging was aber unsicher wegen dem fehlenden Zertifikat. Also hab ich im admin adapter letsencrypt angeschaltet.
Nun bin ich in die Systemeinstellung und hab dort das letsencrypt konfiguriert.
Wenn ich mich nun via meiner Domain verbinden will (also https://domain.de:8081) dann geht das einfach nicht. Die domain ist genau die gleiche die ich vorher unter Systemeinstellung eingetragen habe.Wenn ich in den iobroker data Ordner schau ist zwar der letsencrypt Ordner vorhanden aber leer.
Port 443 + 80 sind auf die IP meines NAS weitergeleitet. Was etwas seltsam ist, die Portweiterleitung con 443 sieht in meiner Fritz.Box etwas komisch aus bezüglich der Port extern vergeben, aber die kann ich gar nicht ändern.
Als Fehler bekomm ich im chrome "ERR_CONNECTION_REFUSED".Hat jemand eine Idee was ich falsch mache?
-
Zwei Schritte weiter bin ich gekommen. Ich hab mal in die logs vom iobroker geschaut und festgestellt das die letsencrypt version nicht die richtige ist.
host.NAS 2019-01-05 14:36:58.775 info Restart adapter system.adapter.admin.0 because enabled host.NAS 2019-01-05 14:36:58.775 error instance system.adapter.admin.0 terminated with code 0 (OK) host.NAS 2019-01-05 14:36:58.775 error Caught by controller[8]: Just run that real quick, restart, and everything will work great. host.NAS 2019-01-05 14:36:58.775 error Caught by controller[7]: npm install --save le-acme-core host.NAS 2019-01-05 14:36:58.775 error Caught by controller[7]: Hey, this isn't a big deal, but you need to manually add v1 support: host.NAS 2019-01-05 14:36:58.775 error Caught by controller[6]: === Error (easy-to-fix) === host.NAS 2019-01-05 14:36:58.775 error Caught by controller[3]: Please update to Let's Encrypt v2 (ACME draft 12) host.NAS 2019-01-05 14:36:58.775 error Caught by controller[3]: Let's Encrypt v1 is deprecated. host.NAS 2019-01-05 14:36:58.775 error Caught by controller[2]: === WARNING === host.NAS 2019-01-05 14:36:58.775 error Caught by controller[1]: Detected Let's Encrypt v01 URL (deprecated). Changing version to v01.
Also bin ich via putty und ssh auf das NAS und hab via npm install –save le-acme-core das letsencrypt aktualisiert.
Jetzt bekomme ich folgende Fehlermeldung:
host.NAS 2019-01-05 16:49:16.342 error instance system.adapter.admin.0 terminated with code 0 (OK) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: port: 80 } host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: address: '::', host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: syscall: 'listen', host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: errno: 'EADDRINUSE', host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: code: 'EADDRINUSE', host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Decoder.add (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-parser/index.js:251:12) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Decoder.Emitter.emit (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Decoder. <anonymous>(/volume1/homes/admin/opt/iobroker/node_modules/component-bind/index.js:21:15) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Manager.ondecoded (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/manager.js:345:8) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Manager.Emitter.emit (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Manager. <anonymous>(/volume1/homes/admin/opt/iobroker/node_modules/component-bind/index.js:21:15) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Socket.onpacket (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:244:12) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Socket.onack (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:319:9) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at Socket.adapter.objects.getObjectList (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.admin/main.js:337:35) host.NAS 2019-01-05 16:49:16.342 error Caught by controller[6]: at getData (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.admin/main.js:283:39) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at new Web (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.admin/lib/web.js:457:7) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at __construct (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.admin/lib/web.js:426:32) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at Object.createServer (/volume1/homes/admin/opt/iobroker/node_modules/iobroker.js-controller/lib/letsencrypt.js:74:21) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at Server.listen (net.js:1391:7) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at listenInCluster (net.js:1303:12) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: at Server.setupListenHandle [as _listen2] (net.js:1255:14) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[6]: { Error: listen EADDRINUSE: address already in use :::80 host.NAS 2019-01-05 16:49:16.341 error Caught by controller[4]: Please update to Let's Encrypt v2 (ACME draft 12) host.NAS 2019-01-05 16:49:16.341 error Caught by controller[4]: Let's Encrypt v1 is deprecated. host.NAS 2019-01-05 16:49:16.341 error Caught by controller[3]: === WARNING === host.NAS 2019-01-05 16:49:16.341 error Caught by controller[1]: Detected Let's Encrypt v01 URL (deprecated). Changing version to v01.</anonymous></anonymous>
Heißt das gibt es schon jemand der auf Port 80 hört. Ich hab also einfach mal alle adapter gepaused, dennoch das selbe Problem. Kann das irgendwas ein Service meiner Synology sein?
Via netstat -n -a -p TCP wurde mir gezeigt das schon jemand auf Port 80 hört.
.... tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN ....
Das hier hat auch nicht geholfen. http://www.iobroker.net/docu/?page_id=3074&lang=de
Das hier auch nicht. https://github.com/ioBroker/ioBroker.js … issues/199
Wie bekomm ich denn jetzt raus welcher Service dort rein funkt?
-
Wenn Du auch auf der Synology LE nutzt dan wird ggf die Synology Port 80 schon belegen . Korrekt.
-
Eine Idee wie ich das raus bekomme bzw. eine mögliche Lösung?
-
Ich bin auch ganz neu bei ioBroker und muss gleich auch mal ein paar Fragen los werden, aber bevor ich damit loslege, werde ich hier mal versuchen zu helfen.
Let's Encrypt unterstützt die verifizierung via http oder dns txt challange. Da du wahrscheinlich keinen eigenen DNS Server für deine Domänen betreibst, bei dem du alle 90 Tage die TXT Records für das verify erneuerst, brauchst du zwingend Port 80 von extern erreichbar.
Weil du diesen ja schon auf deiner Synology nutzt, wirst du da nicht weiterkommen.
Der Let's Encrypt Agent erzeugt dafür auf dem Webserver ein Verzeichnis ".well-known/acme-challenge/" unter welchem er ein für den challenge eine Datei ablegt. Diese muss von extern abgefragt werden.
Wenn du auf beiden weiterhin Let's Encrypt nutzen willst, könnte man folgendes probieren:
Das "acme-challenge" Verzeichnis von deine DS irgendwie in deine IOBroker Instanz mappen, so dass der Let's Encrypt Agent die Datei auf deiner Synology ablegt, die wiederum von extern abgefragt wird.
Vielleicht hat ja sonst noch jemand eine Idee.
-
Über einen Synology-Task kopiere ich täglich die Lets Encrypt Zertifikate in das iobroker Datenverzeichnis. Bei den Zertifikaten kann man an Stelle des Zertifikates dann auch einen Link auf die kopierten Dateien angeben.
Dabei muss sich dann der iobroker gar nur nicht mehr um Lets Encrypt kümmern
Gruß, Ralf
Gesendet von iPad mit Tapatalk
-
Super das probiere ich dann gleich aus. Das heißt den Hacken bei "Benutze diese Instanz für automatische Updates" kann ich dann einfach weglassen. Wo genau liegen die Zertifikate auf der Synology?
-
Wollt es jetzt mal ausprobieren finde aber das LE Zertifikat auf der NAS Station nicht.
Weder hier /var/lib/letsencrypt/.well-known/acme-challenge noch hier /root/letsencrypt/var/lib/acme-challenge ist was drin.
In der Synology ist das LE Zertifikat aber hinterlegt.
Der copy task sieht so aus:cp -R /var/lib/letsencrypt/.well-known/acme-challenge/ /volume1/homes/admin/opt/iobroker/iobroker-data/letsencrypt/
Kann mir jemand helfen?
-
Hier mein Skript:
# Regelmässiges Kopieren der Let's Encrypt Zertifikate für iobroker # Starten mit: # sudo /volume1/docker/prod/script/copy-cert.sh # 09.04.2018 R.Krüger --- Erstellung targetPATH='/volume1/docker/prod/iobroker/esk-cert' cp /usr/syno/etc/certificate/system/default/cert.pem $targetPATH cp /usr/syno/etc/certificate/system/default/privkey.pem $targetPATH # Fertig! touch /volume1/docker/prod/script/copy-cert.log
Gruß Ralf
-
Hab das mal bei mir angepasst aber es will einfach nicht laufen. Settings in iobroker für LE sind folgende:
Im NAS hab ich ein täglichen Aufgabenplan mit folgendem script:targetPATH='/volume1/homes/admin/opt/iobroker/iobroker-data/letsencrypt' cp /usr/syno/etc/certificate/system/default/cert.pem $targetPATH cp /usr/syno/etc/certificate/system/default/privkey.pem $targetPATH
Im target folder liegen die beiden Files dann auch da:
In der web.0 Instanz hab ich LE an aber das automatische update aus.
Wenn ich nun via https://domain.de:8082 verbinde kommt im browser weiterhin nicht sichere Verbindung.In den logs steht dann:
admin.0 2019-01-06 16:35:07.199 error No letsencrypt certificates found in "/volume1/homes/admin/opt/iobroker/iobroker-data/letsencrypt"
Kein Ahnung was ich falsch mache…
-
Wenn Du die Zertifikate der Synology verwendest, musst Du das im ioBroker ohne Let's Encrypt machen.
1. Zertifikate regelmäßig kopieren (hast Du ja schon erledigt)
2. Let's Encrypt im ioBroker deaktivieren
!
3. In den ioBroker-Einstellungen Referenzen auf die kopierten Zertifikate setzen! filename="HC1.png" index="1">~~
4. In der Instanz admin.0 die Zertifikate einsetzen!
Allerdings funktionieren die Zertifikate nur auf dem externen Namen Deiner Synology, als beispielsweise xxx.myds.me. Entweder muss Du die Adresse Deiner Synology auf dem PC in deine C:\Windows\System32\drivers\etc\hosts eintragen ( <ip der/synology="">xxx.myds.me) oder in der Synology Zertifikate für Subdomains anlegen und diese dann unter Reverse Proxy eintragen.
Gruß, Ralf</ip>
-
Super danke dir das hat geklappt. Ich hab nach dem Einstellen einmal den iobroker stoppen und wieder starten müssen und jetzt werden die Zertifikate gefunden. Besten Dank!
> oder in der Synology Zertifikate für Subdomains anlegen und diese dann unter Reverse Proxy eintragen.
Hast du dafür eine Anleitung? Ich wollt gern von außen ohne Ports hantieren, das heißt https://domain.de/foo und https://domain.de/bar eintippen und die sollen dann intern auf den Richtigen Port weitergeleitet werden. Soweit ich weiß sollte nginx dafür brauchbar sein. Oder geht das schon mit Synology Boardmitteln? -
Geht mit Bordmitteln, aber Vorsicht: Damit ist der ioBroker von außen erreichbar und davon wird von den Betreibern aus Sicherheitsgründen dringend abgeraten. Die angebotene Cloud-Lösung ist hier sicherer.
Es geht nicht mit Ergänzungen am Domainnamen, sondern nur mit Subdomains.
Wenn Deine Domaine xxx.myds.me lautet, dann sind Subdomains S1.xxx.myds.me / S2.xxx.myds.me / iobroker.xxx.myds.me, etc.
Für jeden Port (vis, admin oder andere Docker-Container) brauchst Du eine eigene Subdomain.
1. Du brauchst für jede Subdomain ein Zertifikat, die können aber in einem Rutsch angefordert werden.
Wahrscheinlich musst Du dafür Dein vorhandenes Zertifikat löschen oder überschreiben:
-
Systemsteuerung / Sicherheit / Zertifikat
-
Hinzufügen / Zertifikat von Let's Encrypt abrufen
-
Jetzt wird es spannend
– Domainname: xxx.myds.me
-- eMail: Deine eMailadresse
-- Betreff alternativer Name: iobroker.xxx.myds.me;S1.xxx.myds.me;S2.xxx.myds.me (Mit Semikolon trennen!)
Wie gewohnt erhälst Du jetzt ein Zertifikat welches jetzt allerdings mit allen angegebenen Adresse funktioniert.
2. Reverse Proxy einrichten
-
Systemsteuerung / Anwendungsportal / Reverse Proxy
-
Beschreibung:
-
QUELLE
-- Protokoll: HTTPS
-- Hostname: iobroker.xxx.myds.me (Subdomain)
-- Port: 443
-- HSTS aktivieren
-- HTTP/2 aktivieren
- ZIEL
-- Protokoll: HTTPS
-- Hostname: localhost
-- Port: 8081 (Port auf der Synology)
3. Firewall / Router
Der Router muss alle Anfragen auf Port 443 an die Synology weiterleiten.
Ebenso 80 für Let's Encrypt aber der sollte ja schon offen sein.
Gruß, Ralf
-
-
Danke für die ausführliche Erklärung. Soweit hab ich alles konfiguriert, meine subdomains werden aber nicht aufgelöst. Ich bekomme im chrome immer DNS_PROBE_FINISHED_NXDOMAIN.
Ich vermute ich muss meine subdomains bei meinem dyndns Betreiber bekannt machen?
Port 443 und 80 werden an das NAS umgeleitet.
-
Hab es gefunden, wildcard musste im dyndns account eingestellt werden.
Danke und Grüße
-
Bestens, dann füge doch ein [gelöst] an den Anfang des Eintrages zu.
Gruß Ralf
-
Ein kleines bisschen zu früh gefreut. Die Reverse proxy Einstellungen sind jetzt aktiv und die subdomain kann auch aufgelöst werden. Jedoch sind die subdomains jetzt nicht mehr als sicher erkannt. Ich hab das Zertifikat ersetzt und bei Betreff alternativer Name alles subdomains mit ; getrennt aufgeführt.
Das kopieren der Zertifikate im NAS hab ich gleich ausgeschaltet und adressiere die direkt von /usr/syno/etc/certificate/system/default/ da ich iobroker nicht im docker laufen habe.
-
Synology neu gestartet?
Hat der Browser schon das neue Zertifikat übernommen?
-
Synology hab ich neu gestartet. Browserdaten hab ich jetzt mal gelöscht. Damit hat er sich das neue Zertifikat gezogen (seh ich am Ausstellungsdatum) aber die Subdomains werden weiterhin als nicht sicher erkannt.
Ich hab jeweils zwei weiterleitungen gemacht von http->https und https->https jeweils für die zwei Subdomains. -
Wenn ich die Subdomains mit Port eingebe dann werden die als sicher erkannt (Zertifikat wird gefunden). Dann macht der Reverse Proxy ja aber keinen Sinn!?
https://vis.domain.de:8082 –> sicher
vis.domain.de:8082 --> sicher (wegen http auf https reverse proxy)
https://vis.domain.de --> unsicher