[Gelöst] Wiki: FHEM mit SSL-Zertifizierungsstelle

Begonnen von ChHerrm, 26 Juni 2018, 22:25:57

Vorheriges Thema - Nächstes Thema

ChHerrm

Hallo zusammen,
https://wiki.fhem.de/wiki/FHEM_mit_HTTPS_SSL-Zertifikat_und_eine_eigene_Zertifizierungsstelle

Erstmal vorab mein Problem:
Ich verstehe an diesem Wiki den letzten Eintrag bzgl. der anderen Herangehensweise bei Chrome nicht. Was genau muss ich in die oats.extensions.cnf eintragen?

basicConstraints=CA:FALSE
subjectAltName=@my_subject_alt_names --> den "Common name" wie es in den Abfragen bei der Zertifizierung heißt?
subjectKeyIdentifier = hash --> Keine Ahnung was hier hin soll

[ my_subject_alt_names ] --> die eckigen Klammern sollen genau so bleiben oder sind das hier nur Platzhalter?
DNS.1 = fhem01.tuxnet.local --> die IP-Adresse meines FHEMs?
DNS.2 = fhem02.tuxnet.local --> kann das entfallen?
DNS.3 = fhem01-vpn.tuxnet.local --> kann das entfallen?



Hier noch ein paar Randinfos:
Ich habe, gemäß der Anleitung am Ende die Dateien serverkey servercert cacert und cakey. Von dem Zertifizierungs-Gebastel-Ordner habe ich die serverkey.pem und servercert.pem in den Ordner /opt/fhem/certs/ kopiert und in server-key.pem und server-cert.pem umbenannt.
In FHEM habe ich die folgenden Zeilen hinzugefügt:

attr WEB sslVersion TLSv12:!SSLv3
attr WEB HTTPS 1


Firefox ist damit zufrieden und setzt das grüne Schloß nach dem Import. Bei Chrome sieht es aber deutlich schlechter aus. Problem: siehe oben.


Ich hoffe, dass mir jemand auf die Sprünge helfen kann :-\ Firefox nutze ich normalerweise nicht, daher bin ich schon auf den letzten Schritt des Wikis angewiesen. Bitte um Hilfe!

CoolTux


subjectAltName=@my_subject_alt_names
subjectKeyIdentifier = hash

Das einfach so lassen. Du fäst bitte nur den unteren Teil an.





[ my_subject_alt_names ] --> natürlich lässt Du das so
DNS.1 = fhem01.tuxnet.local --> die IP-Adresse meines FHEMs? Nein der DNS Name, steht ja auch so da.
DNS.2 = fhem02.tuxnet.local --> kann das entfallen? Ja wenn du nur einen DNS für das Server Cert hast.
DNS.3 = fhem01-vpn.tuxnet.local --> kann das entfallen? Siehe oben

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Danke für deine Antwort, ich bin gerade erst zum Ausprobieren gekommen.
Ich habe den letzten Versuch gelöscht und deine Anleitung nochmal von vorne abgearbeitet - Chrome ist aber noch immer nicht einverstanden. Als DNS habe ich nur drin "DNS.1=MeinName". Chrome erkennt meine FHEM-Seite aber nicht an. Ich importiere in Chrome unter "Zwischenzertifizierungsstellen" die server-cert.pem in die /opt/fhem/certs liegt, richtig?
Was kann dort denn noch falsch gelaufen sein? Der Vorgang an sich lief gut, keine Fehlermeldungen o.Ä.

CoolTux

Du musst das CA Zertifikat File in Chrome importieren, nicht das Server Zertifikat. Probier mal.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

ZitatDu musst das CA Zertifikat File in Chrome importieren, nicht das Server Zertifikat.
Wenn meine begrenzten Kenntnisse mich nicht taeuschen, dann sollte das egal sein.

ZitatAls DNS habe ich nur drin "DNS.1=MeinName".
Wichtig ist, im Browser https://MeinName:<port>/... anzugeben.

CoolTux

Jein. Wenn es nur um den einen Server geht hast du Recht. Aber wenn du 2-3 ansurfst mit unterschiedlichen Server Zertifikaten dann nimmst du das CA File in die Zertifizierungsliste
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Was Du machen kannst


openssl s_client -connect meinserver:443 -CAfile rootCA.pem


Entweder lokal auf dem server direkt oder von einem Client aus (Notebook) der openssl hat.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Also auf meinem Raspberry Pi kann ich es in Chromium öffnen mit dem cacert.pem.
Auf meinem Windows-Rechner mit Chrome noch immer nicht. Im Firefox geht das gleiche Zertifikat auf dem Windows-Rechner. Bei Chromium und Firefox habe ich ausgewählt, dass ich es nur zur Authentifizierung von Websites nutzen will. Bei Chrome gibt's ja unübersichtliche 100 Möglichkeiten.
Ich habe dort in den Erweiterten Einstellungen bei den Zwischenzertifizierungsstellen defaultmäßig alle Haken drin außer Clientauthentifizierung und Mails. Ist das richtig?

CoolTux

Ist richtig. Das passt.
Ich denke es liegt an den alternativ names. Zeig Mal bitte deine oats.extensions.cnf
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

my-engel

Hallo,

ich verstehe noch nicht so richtig was du erreichen willst...
Stand jetzt ist doch vermutlich das FHEM mit SSL auf Port 443 läuft und
du mit einem Browser mit https aus dem LAN drauf gehst. Richtig?
Dein Browser zeigt aber an dass dein Zertifikat unsicher ist und nicht geprüft werden kann. Richtig?
Willst du jetzt nur in deinem lokalen LAN per SSL auf FHEM drauf oder auch vom Internet aus?

MfG Uwe

ChHerrm

Hier meine oats.extensions.cnf:


basicConstraints=CA:FALSE
subjectAltName=@my_subject_alt_names
subjectKeyIdentifier=hash

[ my_subject_alt_names ]
DNS.1 = PI3

Der Aufruf ist dann https://pi3:8083/fhem...
Findet er auch, sagt halt nur, dass die Seite unsicher ist.
Die Versuche sind erstmal nur im gleichen Netzwerk.

CoolTux

Mach mal F12 beim Chrome und gehe da auf Sicherheit. Lass Dir dann mal das Zertifikat anzeigen.

Ich denke er meckert weil Du nur den Hostnamen ohne Domain inalr alternative Name hast. Du musst den FQDN angeben. Also Host plus Domain.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Im Zertifikat steht folgendes:

Reiter Allgemein:
Ausgestellt von uns ausgestellt für sind jeweils PI3.
Dieses Zertifikat kann nicht bis zu einer Zertifizierungsstelle verifiziert werden.

Reiter Zertifizierungspfad:
PI3
Dieses Zertifizierungsstellen-Stammzertifikat ist nicht vertrauenswürdig, da es sich nicht in dem Speicher vertrauenswürdiger Stammzertifizierungsstellen befindet.

Darunter ist nochmal PI3:
Dieses Zertifikat ist gültig.

CoolTux

Dieses Zertifizierungsstellen-Stammzertifikat ist nicht vertrauenswürdig, da es sich nicht in dem Speicher vertrauenswürdiger Stammzertifizierungsstellen befindet.


Na da steht es doch.Wo hast Du das CA Zertifikat denn im Browser installiert? Siehe Bildanhang
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

my-engel

Hallo,
Ich frag nochmal....
Willst du jetzt nur in deinem lokalen LAN per SSL auf FHEM drauf oder auch vom Internet aus?

MfG Uwe

ChHerrm

Perfekt, das Zertifikat war nur im falschen Speicher :-[
Habe es jetzt im Speicher wie im Anhang dargestellt. Das klappt auf jeden Fall auf dem Laptop jetzt.
Danke für die geduldige Hilfe! :D
Per Handy und Tablet geht's aber nicht, der kriegt die DNS gar nicht aufgelöst obwohl die Geräte im gleichen WLAN sind ??? Wie kriege ich denn per Android die DNS angefragt?

@Uwe: Ich will im nächsten Schritt auch von außen drauf, aber das wird wohl eher nichts. Dafür bräuchte ich ja sicherlich einen kostenpflichtigen DynDNS-Dienst, da unser Router keine VPN-Möglichkeit anbietet und Port-Forwarding ja nur auf die IP und nicht auf den DNS kommt, denke ich mal. Oder?

CoolTux

Zitat von: my-engel am 29 Juni 2018, 20:17:51
Hallo,
Ich frag nochmal....
Willst du jetzt nur in deinem lokalen LAN per SSL auf FHEM drauf oder auch vom Internet aus?

MfG Uwe

Darf ich fragen welche Rolle das spielt? Es sollte keine Rolle spielen, von beiden Seiten sollte die Zertifikatkette valide sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

my-engel

Hallo noch mal,
habe ich mir fast gedacht.
Bei deiner jetzigen Lösung musst du halt an jedem PC, der irgendwann auf FHEM zugreift das Zertifikat einbinden.
Würde ich so nicht machen aber es ist jetzt in der IHS Box (I-st H-alt S-o).

Ganz für Lau bekommst du dass nicht gelöst aber fast...

Erklärung:
Dein Webserver auf dem RPi braucht ein Zertifikat welches dem Client (PC/Browser) zum verschlüsseln angeboten wird.
Du hast jetzt OpenSSL installiert und damit eins erzeugt.
Du hättest dieses aber auch mit jedem beibiegen anderen Rechner erzeugen können dann rüber kopiert und gleiches Ergebnis gehabt.

Der Client hat eine Hand voll Root Zertifikate von Zertifizierungsstellen installiert.
Beim Aufrufen von Fhem im Browser schaut der Browser jetzt im Internet bei den Root-Servern nach ob das von Deinem FHEM - Webserver
bei diesen bzw. bei untergeordneten Zwischenzertifizierungsstellen gelistet ist.
Dies ist es aber nicht und deshalb die Fehlermeldung.
Du musstest Dein Zertifikat bei einer dieser Zwischenzertifizierungsstellen signieren lassen.
Dies ist umständlich und kostet je nach Typ des Zertifikats verhältnismäßig viel Geld.

Voraussetzung für alles ist aber, dass Dein FHEM – Webserver vom Internet aus per DNS erreichbar ist.
Da du sicherlich keine feste IP von deinem Provider bekommst willst du auf kostenpflichtigen DYNDNS ausweichen.
Problem dabei ist, dass die Registrierten Subdomains wie hans-meier.dyndns-anbieter.org immer mehr werden
und die Zertifizierungsstellen bei zu vielen SubDomains das Signieren verweigern.

Die günstigste Lösung aus meiner Sicht wäre z.B.:
registriere eine eigene Domain ohne Speicherplatz usw. z.B. bei st**to , Kostet ca. 80 Cent pro Monat.
Lege dann eine Subdomain an und stelle diese dann beim Anbieter auf DYNDNS.
Dein IAS-Device (z.B. Fritz box) stellst du auf Aktualisierung für diese DynDNS.
Dann stellst du an deinem Router die Ports 80 und 443 per Forwarting auf deinen RPI.
Jetzt muss Fhem mit deiner eigenen Webadresse erreichbar sein.

Nun zum Zertifikat:
da könntest du z.B. letsencrypt.org nehmen. Diese Org. ist für kostenlose Zertifikate.
Diese sind allerdings immer nur für 3 Monate gültig.
Kurz vor Ablauf bekommst du per Mail eine Erinnerung.
Mit einem 2 Zeiler Befehl am RpI installierst du den Spaß.
Jeweils zum Ablauf des Zertifikates reicht dann ein 1-Zeiler den du per Cron starten kannst.

Bedenke aber:
Bei SSL wird von Punkt zu Punkt verschlüsselt und keiner kann mitlesen.
Aber dein Webserver kann trotzdem mit Benutzername und Passwort angegriffen werden.
Etwas mehr Sicherheit würde bringen, wenn du dann einen Proxy in eine DMZ stellen würdest.
Raten würde ich dir aber trotz alle dem zu einer VPN Verbindung....

MfG
Uwe

ChHerrm

Danke für die Infos, das erste Problem ist aber erstmal, dass ich per Android momentan gar nicht mehr auf den testweisen SSL-Port komme :-\
Wenn ich die Android Geräte auch dazu überredet bekomme, dass sie das Zertifikat als sicher ansehen, wäre das fürs erste für mich schon mal akzeptabel. Habt ihr dabei n Hinweis, warum Android https://pi3:8083 nicht erkennt? Das Zertifikat hab ich da schon importiert.

my-engel

Ich nochmal,

da funktioniert die DNS Auflösung im Router zum WLAN nicht.
Nehm einfach https://ipadresse:8083

MfG Uwe

CoolTux

Zitat von: my-engel am 29 Juni 2018, 21:46:02
Hallo noch mal,
habe ich mir fast gedacht.
Bei deiner jetzigen Lösung musst du halt an jedem PC, der irgendwann auf FHEM zugreift das Zertifikat einbinden.
Würde ich so nicht machen aber es ist jetzt in der IHS Box (I-st H-alt S-o).

Ganz für Lau bekommst du dass nicht gelöst aber fast...

Erklärung:
Dein Webserver auf dem RPi braucht ein Zertifikat welches dem Client (PC/Browser) zum verschlüsseln angeboten wird.
Du hast jetzt OpenSSL installiert und damit eins erzeugt.
Du hättest dieses aber auch mit jedem beibiegen anderen Rechner erzeugen können dann rüber kopiert und gleiches Ergebnis gehabt.

Der Client hat eine Hand voll Root Zertifikate von Zertifizierungsstellen installiert.
Beim Aufrufen von Fhem im Browser schaut der Browser jetzt im Internet bei den Root-Servern nach ob das von Deinem FHEM - Webserver
bei diesen bzw. bei untergeordneten Zwischenzertifizierungsstellen gelistet ist.
Dies ist es aber nicht und deshalb die Fehlermeldung.
Du musstest Dein Zertifikat bei einer dieser Zwischenzertifizierungsstellen signieren lassen.
Dies ist umständlich und kostet je nach Typ des Zertifikats verhältnismäßig viel Geld.

Voraussetzung für alles ist aber, dass Dein FHEM – Webserver vom Internet aus per DNS erreichbar ist.
Da du sicherlich keine feste IP von deinem Provider bekommst willst du auf kostenpflichtigen DYNDNS ausweichen.
Problem dabei ist, dass die Registrierten Subdomains wie hans-meier.dyndns-anbieter.org immer mehr werden
und die Zertifizierungsstellen bei zu vielen SubDomains das Signieren verweigern.

Die günstigste Lösung aus meiner Sicht wäre z.B.:
registriere eine eigene Domain ohne Speicherplatz usw. z.B. bei st**to , Kostet ca. 80 Cent pro Monat.
Lege dann eine Subdomain an und stelle diese dann beim Anbieter auf DYNDNS.
Dein IAS-Device (z.B. Fritz box) stellst du auf Aktualisierung für diese DynDNS.
Dann stellst du an deinem Router die Ports 80 und 443 per Forwarting auf deinen RPI.
Jetzt muss Fhem mit deiner eigenen Webadresse erreichbar sein.

Nun zum Zertifikat:
da könntest du z.B. letsencrypt.org nehmen. Diese Org. ist für kostenlose Zertifikate.
Diese sind allerdings immer nur für 3 Monate gültig.
Kurz vor Ablauf bekommst du per Mail eine Erinnerung.
Mit einem 2 Zeiler Befehl am RpI installierst du den Spaß.
Jeweils zum Ablauf des Zertifikates reicht dann ein 1-Zeiler den du per Cron starten kannst.

Bedenke aber:
Bei SSL wird von Punkt zu Punkt verschlüsselt und keiner kann mitlesen.
Aber dein Webserver kann trotzdem mit Benutzername und Passwort angegriffen werden.
Etwas mehr Sicherheit würde bringen, wenn du dann einen Proxy in eine DMZ stellen würdest.
Raten würde ich dir aber trotz alle dem zu einer VPN Verbindung....

MfG
Uwe

Lese bitte erstmal den Wiki Eintrag bevor Du hier die Leute verwirrst.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Die IP will ich ja gerade weg haben aus dem Aufruf von Android, sonst hab ich ja wieder keine sichere Seite und muss mich jedes mal bestätigen, dass ich die Seite nutzen will ???

CoolTux

Zitat von: ChHerrm am 29 Juni 2018, 20:26:54
Perfekt, das Zertifikat war nur im falschen Speicher :-[
Habe es jetzt im Speicher wie im Anhang dargestellt. Das klappt auf jeden Fall auf dem Laptop jetzt.
Danke für die geduldige Hilfe! :D
Per Handy und Tablet geht's aber nicht, der kriegt die DNS gar nicht aufgelöst obwohl die Geräte im gleichen WLAN sind ??? Wie kriege ich denn per Android die DNS angefragt?

@Uwe: Ich will im nächsten Schritt auch von außen drauf, aber das wird wohl eher nichts. Dafür bräuchte ich ja sicherlich einen kostenpflichtigen DynDNS-Dienst, da unser Router keine VPN-Möglichkeit anbietet und Port-Forwarding ja nur auf die IP und nicht auf den DNS kommt, denke ich mal. Oder?

Du brauchst einen DynDNS-Dienst und stellst in dem Router Portforwarding ein. In Deinem Serverzertifikat muss dann als alternativ Name halt noch Dein DynDNS Name mit rein. Und unter diesen muss auch deine Webseite erreichbar sein. Daher am besten ein Reverse Proxy an legen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Das Problem ist das die Android Geräte Standard mäßig nur auf Google DNS Server zu greifen. 8.8.8.8 und 8.8.4.4

Bei mir ist es so das ein DHCP Server auch Info zu weiteren DNS Servern im Netz an die Android Geräte vergibt daher wird bei internen Domainanfragen dieser verwendet. Von wo bekommen deine Android Geräte ihre IP?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Hm, das ist ja Mist. Meine Android Geräte kriegen die ganz normal vom Router. Unser Router gibt leider auch so gar nix her. Ohne DynDNS bleibt mir also nix übrig außer die "unsicheren" Seiten zu bestätigen? Dann hat sich die Aktion vorerst nur so semi gelohnt, aber zumindest schon mal für Windows

my-engel

Entschuldige wenn ich hier jemanden verwirrt haben sollte,
aber laut Wiki fügst du die CA dem Client als vertrauenswürdig  hinzu.
Dieses musst du  dann aber an jedem Client tun der darauf zugreifen soll.
Wenn Du im Büro bei der Arbeit das tun wölltest und ich dort Admin wäre,
hätte ich das bestimmt per Richtlinie verboten.
Es kann ja jeder selbst entscheiden,  ich habe hier nur eine saubere Lösung augezeigt...

MfG Uwe


CoolTux

Zitat von: my-engel am 29 Juni 2018, 22:46:04
Entschuldige wenn ich hier jemanden verwirrt haben sollte,
aber laut Wiki fügst du die CA dem Client als vertrauenswürdig  hinzu.
Dieses musst du  dann aber an jedem Client tun der darauf zugreifen soll.
Wenn Du im Büro bei der Arbeit das tun wölltest und ich dort Admin wäre,
hätte ich das bestimmt per Richtlinie verboten.
Es kann ja jeder selbst entscheiden,  ich habe hier nur eine saubere Lösung augezeigt...

MfG Uwe

Das ist korrekt, Du musst natürlich auf jedem Clientbrowser das rootCA als vertrauenswürdige Zertifizierungsstelle importieren. Das musst Du aber nur einmal machen. Möglich das es auf Arbeit nicht geht, aber dann nimmt man halt sein Handy.
Du kannst natürlich auch das ganze über andere Kostenpflichtige Wege machen. Aber gerade das zeigt ja wie gesagt mein Weg nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: ChHerrm am 29 Juni 2018, 22:44:02
Hm, das ist ja Mist. Meine Android Geräte kriegen die ganz normal vom Router. Unser Router gibt leider auch so gar nix her. Ohne DynDNS bleibt mir also nix übrig außer die "unsicheren" Seiten zu bestätigen? Dann hat sich die Aktion vorerst nur so semi gelohnt, aber zumindest schon mal für Windows
kannst du im router nicht von hand einträge für dns vornehmen?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ChHerrm

Traurigerweise nicht mal das :'( demnächst wollten wir uns eh mal ne Fritzbox zulegen, dann greife ich das nochmal auf. Danke auf jeden Fall für die Hilfe, das hat am Ende dann ja geklappt, Thema gelöst :)