Hallo schuma
wenn Du keine eigene Domain und feste IP Adresse hast mußt Du dynDNS dafür benutzen. Ohne Domain Name wird das mit dem öffentlichen Zertifikat nicht funktionieren.
Ich selber nutze kein dynDNS und kann daher keine Empfehlung für einen Anbieter nennen. Hier wird aber sicher jemand aus dem Forum weiterhelfen können.
Schönen Abend
Michael
Ankündigung
Einklappen
Keine Ankündigung bisher.
Amazon Alexa Plugin
Einklappen
X
-
Nahmd...
Nunja, Du benötigst eine Url, die mit fester IP oder über Dyndns aufgelöst wird.
Feste IP eher unwahrscheinlich, also Dyndns. Im Prinzip kannst Du dann die Url <name>.dyndns.org beantragen und für das Zertifikat verwenden.
Bei meinem dyndns Dienst war dann nur das Problem, dass letsencrypt für den zuviele Zertifikate generiert hatte und keine weiteren ausstellen wollte.
Also eine subdomain für meine eigene Domain erstellt und gut ist.
Versuch macht kluch und bei einem Smarthome darf auch mal ne eigene Domain abfallen.
Gruß Jürgen
Einen Kommentar schreiben:
-
Also ich bin jetzt kurz vor dem Aufgeben!!!
Beim Zertifikat erstellen muss man ja eine Domain angeben. Ich habe aber keine eigene Domain. Dadurch läuft das immer auf einen Fehler.
Was tragt Ihr hier ein?
Oder funktioniert das Zertifikat dann trotzdem?
Aktuell bekomme ich im Lamda folgende Fehlermeldung beim Test:
Die IP passt und der Port auch.Code:{ "errorType": "Error", "errorMessage": "connect ECONNREFUSED xxx.xxx.xxx.xxx:9900", "trace": [ "Error: connect ECONNREFUSED xxx.xxx.xxx.xxx:9900", " at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14)" ] }
Einen Kommentar schreiben:
-
Hallo schuma ,
aus Sicherheitsgründen würde ich immer über einen Reverse Proxy gehen. Dieser gehört eigentlich auch auf einer eigenen Maschine in die DMZ. Das bekommts mit der Fritte aber nicht hin.
Ich nutze für alexa auch einen anderen Port als tcp/443 .
Man kann aber über tcp/443 auch mehrere Applikationen auf dem reverse proxy bringen. Der proxy entscheidet nach port und Hostname.
PS. Um das SSL hardening mit ssllabs testen brauchst Du zwingen tcp/443. Ich will da immer ein A+
Gruß
Michael
Einen Kommentar schreiben:
-
Hallo schuma
das würde schon gehen, aktuell kann man das Zertifikat auch direkt beim Alexa4P3 Plugin einbinden, ich kenne aber keinen der das so nutzt.Zitat von schuma Beitrag anzeigenBrauche ich denn überhaupt zwingend einen Reverse Proxy?
Wenn Amazon mit dem Dyndns und Port die Verbindung aufbaut?
Ob das funktioniert - kommt noch vom ursprünglichen Plugin - hab ich nie getestet. Würde aber auch davon Abstand nehmen. Die Kommunikation über den
NGINX hat sich bewährt. Wenn Du das Zertifikat direkt im Plugin einbinden möchtest bekommst du noch mehr Trödel mit Berechtigungen usw.
Ausserdem prüft das Plugin nicht auf User/PWD sondern stellt nur einen SSL-HTTP-Server zur Verfügung. Dort wird dann ohne Berechtigungsprüfung alles akzeptiert.
Über den NGINX hast Du auch gleichzeitig noch ein Logging für Fehler und Zugriffe - find ich gut und wollte ich nicht missen.
P.S. Ich nutze als Zugang zum NGINX ein abweichenden Port - nicht 443 - den wollte ich mir freihalten.
Gruss Andre
Einen Kommentar schreiben:
-
Ok, vielen Dank euch Beiden!
Das bringt wirklich etwas Licht ins dunkle.
Ich versuche es morgen noch mal, mit der setup_all ein neues Zertifikat zu erstellen.
Brauche ich denn überhaupt zwingend einen Reverse Proxy?
Wenn Amazon mit dem Dyndns und Port die Verbindung aufbaut?
Ich habe in der Fritte den Port 443 eh freigegeben...
Einen Kommentar schreiben:
-
schuma
Kurze Erklärung was passiert / passieren soll :
- die Lambda will eine SSL-Verbindung, diese baut sie zu Deinem Nginx auf, dieser macht das SSL-Handling und stellt (hoffentlich) ein öffentliches Zertifikat zur Verfügung. ( das will Amazon so . (Punkt im Sinne von Punkt - da führt kein Weg dran vorbei)
- der Nginx gibt die Nutzdaten via forwarding an das Plugin (Definition in der location der nginx-Config)
- das Plugin verarbeitetet die Daten und gibt den Response via Nginx (das passiert automatisch da die Verbindung von Amazon via Nginx aufgebaut wurde) zurück
schematisch :
Die Erstellung eines offiziellen Let's encrypt Zertifikats, falls nicht vorhanden findest Du in der shNG-Doku wie oben verlinnkt.Code:amazon:<Port_aus_der_Lambda> <=> Nginx-IN :<Port_aus_der_Lambda> <=> Nginx-OUT:<Port_aus_der_plugin.yaml> <=> plugin:<Port_aus_der_plugin.yaml>
Ich denke das bringt etwas Licht ins Dunkel.
Gruss Andre
Einen Kommentar schreiben:
-
Du brauchst ein öffentliches Zertifikat."errorMessage": "self signed certificate",
Einen Kommentar schreiben:
-
Ich denke in dem Image von Onkelandy ist ja schon einiges vorkonfiguriert. Ip und Port habe ich gefunden ist bei 9000.
Passwort habe ich jetzt auch so gesetzt wie du gesagt hast (htpasswd).
Ich habe auch mit setup_ all Zertifikate erstellen lassen und einen Revers Proxy eingerichtet. (Wobei ich hier absolut nicht verstehe was da vor sich geht,-( )
Bei dem Lambda Test bekomme ich diese Fehlermeldung:
Muss ich nicht irgenwie der Lambda Funktion das Zertifikat mitteilen?Code:{ "errorType": "Error", "errorMessage": "self signed certificate", "trace": [ "Error: self signed certificate", " at TLSSocket.onConnectSecure (_tls_wrap.js:1321:34)", " at TLSSocket.emit (events.js:210:5)", " at TLSSocket._finishInit (_tls_wrap.js:794:8)", " at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:608:12)" ] }
Ich gebe für heute erstmal auf....
Einen Kommentar schreiben:
-
schuma
ich gehe davon aus
hast du so gemacht ?Zitat von schuma Beitrag anzeigenJetzt habe ich in der Datei nginx/.alexa mein Passwort und Benutzername aus der Lambdafunktion eingefügt.
Desweiteren muss bei der Lambda-Funktion der Port deines Nginx stehen (der Port der auf SSL hört).Code:sudo htpasswd -c /etc/nginx/.alexa <username>
In der Nginx Config muss Du dann auf den Port der in der plugin.yaml steht routen.
wobeiCode:# Alexa Plugin Weiterleitung location /alexa { auth_basic "Restricted Area: Alexa"; auth_basic_user_file /etc/nginx/.alexa; # Zugreifendes Land erlaubt? if ($allowed_country = no) { return 403; } proxy_pass http://<SmartHomeNG LAN IP>:<Alexa Plugin Port>/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
sein kann wenn der Ngix auf Deiner ShNG-Maschine läuft.Code:<SmartHomeNG LAN IP> = 127.0.0.1
Nachtrag : Amazon will SSL - Zertifikat ist also ein MUSSCode:<Alexa Plugin Port> = Port aus der plugin.yaml von shNG
Die aktuelle Config aus dem Image kenne ich nicht, es muss aber so sein, wie ich dem Verlauf entnehme, dass
"alexa" als IP:Port irgendwo zu Beginn der config definiert wird. Also dort ändern und nicht bei der eigentlichen Location
Ich will hier keine Verwirrung stiften
Gruss Andre
Einen Kommentar schreiben:
-
/etc/nginx/sites-available/default
Allerdings ist da die Frage, ob es mit den Zertifakten der richtige Weg ist. Kannst aber natürlich auch einfach nur basic auth aktivieren.
Die Zertifikate werden automatisch alle 3 Monate aktualisiert, sofern man aus dem Internet auf dem Port 80 auf deinen Rechner kommt.
Einen Kommentar schreiben:
-
Hmm, irgendwie schnalle ich es nicht....Zitat von Onkelandy Beitrag anzeigenschuma am besten orientierst du dich am monit Eintrag in der nginx Config Datei unter availablesites.
Statt proxy_pass http://monithost; müsstest du http://alexa eingeben und ganz oben in der Datei checken, ob 9000 der richtige Port ist.
Es gibt ja unter nginx/conf.d die Datei https.conf
Dort gibt es ja diesen Eintrag:
Jetzt habe ich in der Datei nginx/.alexa mein Passwort und Benutzername aus der Lambdafunktion eingefügt.Code:# Alexa Plugin Weiterleitung location /alexa/ { include /etc/nginx/headers.conf; satisfy any; auth_basic "Restricted Area: Alexa"; auth_basic_user_file /etc/nginx/.alexa; allow 127.0.0.1; allow 192.168.0.0/16; allow 10.0.0.0/16; allow ::1; deny all; # This script tests the SSL certificate and enables Websocket access with Apple devices. # If you want to limit your access to devices with certificates (recommended!), don't remove this line! access_by_lua_file /etc/nginx/scripts/hass_access.lua; proxy_pass http://alexa; }
In welcher Datei soll ich nun den Port checken?
Sorry, aber ich stehe hier echt auf dem Schlauch....
Einen Kommentar schreiben:
-
schuma ,
schau mal hier, da steht wie man den User für Alexa und andere anlegt und wie die Config aussehen muss. Da hat sich meines Wissens nichts geändert.
Am besten im AWS-Zentrum mal mit einer Test-Funktion zugreifen - dort bekommst du dann entsprechende Fehlermeldungen.
Test-Funktion für ein Discovery :
Die Testfunktionen findest Du oben rechts - "configure Test-Events" bei der Lambda-Funktion - dort einfach den obigen Code einfügen und speichern, danach kannst Du mit "Test" die Funktions ausführen. - Meldungen kommen dann prompt.Code:{ "directive": { "header": { "namespace": "Alexa.Discovery", "name": "Discover", "payloadVersion": "3", "messageId": "abc-123-def-456" }, "payload": { "scope": { "type": "BearerToken", "token": "access-token-from-skill" } } } }
Gruss Andre
Einen Kommentar schreiben:
-
Ich habe da den User und Passwort eingetragen aus der nginxWas muss ich dann in der Lambda Funktion bei SMARTHOME_AUTH als user
asswort eintragen?
Code:auth_basic "user"; auth_basic_user_file /etc/nginx/htpasswd;
Einen Kommentar schreiben:
-
Das heißt, wenn ich setup_all aufrufe kann ich dort ein Zertifikat anlegen lassen, und damit sollte alexa dann funktionieren? Ohne weitere Einstellungen?Zitat von Onkelandy Beitrag anzeigenMit Zertifikaten müsste alles klappen, aber du musst neue anlegen lassen, am besten mit setup_all
Muss man dann das Zertifikat alle 3 Monate von Hand aktuallisieren und passiert das irgendwie automatisch?
Was muss ich dann in der Lambda Funktion bei SMARTHOME_AUTH als user
asswort eintragen?
Einen Kommentar schreiben:


Einen Kommentar schreiben: