Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CloudMatic baut keine Verbindung mehr auf mit aktuellen RM-Snapshots #2442

Closed
Baxxy13 opened this issue Sep 22, 2023 · 33 comments
Closed

CloudMatic baut keine Verbindung mehr auf mit aktuellen RM-Snapshots #2442

Baxxy13 opened this issue Sep 22, 2023 · 33 comments
Labels
➡️ third-party issue This is a bug/issue for/in other third-party software 🐛 bug-report Something isn't working 🔥 security relevant This is a security relevant issue/ticket 👍 important This is an important issue/ticket with high priority 🧠 unstable-snapshot This ticket references the use of an unsupported unstable snapshot being used.

Comments

@Baxxy13
Copy link
Contributor

Baxxy13 commented Sep 22, 2023

Describe the issue you are experiencing

CloudMatic funktioniert aktuell nicht mit den letzten Nightly-Snapshots von RaspberryMatic.
So wie es aussieht ist das aktuelle CA-Zertifikat nicht mehr valide und die VPN-Verbindung wird darum nicht mehr aufgebaut.
Ich bekomme keinen Zugriff via CloudMatic-Connect auf die Zentrale und beim gestrigen Zentralen (Neu)Start sowie heutigem Cloudmatic-Update gab es ein paar ungewöhnliche Meldungen im Log.

Describe the behavior you expected

CloudMatic sollte auch im Nightly, bzw. in der folgenden Release-Version funktionieren.

Steps to reproduce the issue

  1. letzten Nightly installieren
  2. aktiven CloudMatic Account nutzen
  3. nach dem Zentralenstart oder nach einem CloudMatic Update ins Log schauen
    ...

What is the version this bug report is based on?

3.71.12.20230918 - Nightly

Which base platform are you running?

ova (Open Virtual Infrastructure)

Which HomeMatic/homematicIP radio module are you using?

RPI-RF-MOD

Anything in the logs that might be useful for us?

Log vom Zentralenstart gestern:
Sep 21 19:57:58 RM-CCU user.info homematic: cloudmatic.de loophammer startet openvpn.
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1911]: WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1911]: WARNING: file '/usr/local/etc/config/addons/mh/client.key' is group or others accessible
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1912]: WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.
Sep 21 19:57:58 RM-CCU daemon.err openvpn[1912]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
Sep 21 19:57:58 RM-CCU daemon.err openvpn[1912]: Cannot load certificate file /usr/local/etc/config/addons/mh/client.crt

Log vom CloudMatic Update heute:
Sep 22 07:17:09 RM-CCU user.info homematic: cloudmatic.de update startet openvpn.
Sep 22 07:17:09 RM-CCU daemon.warn openvpn[7081]: WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
Sep 22 07:17:09 RM-CCU daemon.warn openvpn[7081]: WARNING: file '/usr/local/etc/config/addons/mh/client.key' is group or others accessible
Sep 22 07:17:09 RM-CCU daemon.warn openvpn[7082]: WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.
Sep 22 07:17:09 RM-CCU daemon.err openvpn[7082]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
Sep 22 07:17:09 RM-CCU daemon.err openvpn[7082]: Cannot load certificate file /usr/local/etc/config/addons/mh/client.crt

Additional information

Muss hier CloudMatic neue cert's verteilen?
Leider habe ich den vorigen Nightly [3.71.12.20230914-dd0caca] schon "entsorgt" so das ich nicht mit Sicherheit sagen kann das es an der Aktualisierung der openvpntools liegt.

@Baxxy13 Baxxy13 added the 🐛 bug-report Something isn't working label Sep 22, 2023
@jens-maus
Copy link
Owner

Vor ein paar Tagen wurden die openvpntools für den Nightly-Snapshot aktualisiert. 9097d9b

Ich denke du verwechselst hier etwas. In dem referenzierten Commit geht es um die openvmtools und nicht um openvpn das CloudMatic ja nutzt.

So wie es für mich aktuell aussieht ist Cloudmatic damit inkompatibel. Zumindest bekomme ich keinen Zugriff und beim gestrigen Zentralen (Neu)Start sowie heutigem Cloudmatic-Update gab es ein paar ungewöhnliche Meldungen im Log.
[...]

Log vom Zentralenstart gestern:
Sep 21 19:57:58 RM-CCU user.info homematic: cloudmatic.de loophammer startet openvpn.
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1911]: WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1911]: WARNING: file '/usr/local/etc/config/addons/mh/client.key' is group or others accessible
Sep 21 19:57:58 RM-CCU daemon.warn openvpn[1912]: WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.
Sep 21 19:57:58 RM-CCU daemon.err openvpn[1912]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
Sep 21 19:57:58 RM-CCU daemon.err openvpn[1912]: Cannot load certificate file /usr/local/etc/config/addons/mh/client.crt

Wenn man die OpenSSL Fehlermeldung googled wird man sehr schnell fündig:

https://superuser.com/questions/1737052/openssl-error0a00018essl-routinesca-md-too-weak

Konkret sieht es so aus als ob hier wirklich das CA Zertifikat von CloudMatic bzw. Easy Smarthome nicht mehr ganz dem aktuellen stand der Technik entspricht. Denke hier müsste @DevEddy bzw. @m-scheffler oder @easysmarthome-eschaefer aktiv werden und das Zertifikat der CA erneuern bzw. auf aktuellen Stand bringen. Die entsprechenden Infos sind hier zu finden:

The answer is in the error messages (error:0A00018E:SSL routines::ca md too weak). OpenSSL refuses to use the CA certificate because certain parameters are considered insecure nowadays. This could be caused by the certificate using MD5 or SHA1 for signing.

You should regenerate your CA and certificates with secure hash algorithms for the signature, as your currently used hash algorithms are not considered secure anymore.

Bis das jedoch passiert sollte aber laut dem superuser Artikel es vielleicht auch möglich sein die Verbindung trotzdem mit dem folgenden Workaround aufzubauen. Probier mal in deiner /usr/local/etc/config/addons/mh/client.conf den folgenden Eintrag hinzuzufügen:

tls-cipher "DEFAULT:@SECLEVEL=0"

Dann sollte er die Verbindung vielleicht trotz schwachem CA Zertifikat wieder aufbauen können.

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Sep 22, 2023

Tschuldige die Verwechselung... irgendwie kann ich heute nicht richtig gucken.

Der Workaround funktioniert.
Wird aber durch das zyklische Update (und damit überschreiben der /usr/local/etc/config/addons/mh/client.conf) wieder deaktiviert. Ist jetzt für mich erstmal kein Problem da ich den cronjob nur 1x die Woche ausführen lasse.

Da das ja nun in der Tat ein CloudMatic-Problem ist...
soll ich das Ticket:

  • anpassen und offenlassen
  • oder schließen

@jens-maus
Copy link
Owner

Tschuldige die Verwechselung... irgendwie kann ich heute nicht richtig gucken.

Der Workaround funktioniert. Wird aber durch das zyklische Update (und damit überschreiben der /usr/local/etc/config/addons/mh/client.conf) wieder deaktiviert. Ist jetzt für mich erstmal kein Problem da ich den cronjob nur 1x die Woche ausführen lasse.

Da das ja nun in der Tat ein CloudMatic-Problem ist... soll ich das Ticket:

  • anpassen und offenlassen
  • oder schließen

Pass ihn an und lass ihn offen bis @DevEddy hier sich das mal angeschaut hat. Entweder (und das wäre das beste) passen die ihr CA Zertifikat an oder sie modifizieren die client.conf und fügen für jeden den tls-cipher "DEFAULT:@SECLEVEL=0" Eintrag hinzu. Letzteres wäre allerdings ggf. nur eine Notlösung und besser wäre es wirklich das CA würde angepasst werden.

@jens-maus jens-maus added the ➡️ third-party issue This is a bug/issue for/in other third-party software label Sep 22, 2023
@github-actions
Copy link
Contributor

@Baxxy13, the issue you reported cannot be solved within this project or should be better directly solved in a third-party project RaspberryMatic just uses. So please consider creating an additional issue ticket in this third-party project. If still relevant we can keep this issue ticket open here for the time being so that you can use it as a reference in issue tickets for the third-party report.

@Baxxy13 Baxxy13 changed the title Inkompatibilität CloudMatic mit der kürzlichen Aktualisierung der openvpntools? CloudMatic baut keine Verbindung mehr auf mit aktuellen RM-Snapshots Sep 22, 2023
@jens-maus jens-maus added the 🧠 unstable-snapshot This ticket references the use of an unsupported unstable snapshot being used. label Sep 23, 2023
@jens-maus
Copy link
Owner

@Baxxy13 Kannst du bitte mal die Ausgabe von folgenden Befehlen zeigen damit man auch hier sehen kann das das ca.crt / client.crt von CloudMatic aktuell immer noch den unsicheren sha1 hash Algorithmus verwendet:

openssl x509 -in /usr/local/etc/config/addons/mh/ca.crt -text -noout

Und dann bitte auch noch die Ausgabe des client.crt:

openssl x509 -in /usr/local/etc/config/addons/mh/client.crt -text -noout

Wenn da z.B. bei Signature Algorithm immer noch sha1WithRSAEncryption Verwendung findet, dann sollte hier EasySmarthome bzw. @DevEddy recht schnell mal aktiv werden, denn das bedeutet das die VPN Verbindungen nicht mehr als sicher zu betrachten sind.

Und das erklärt auch die Fehlermeldung die jetzt kommt, denn seit OpenSSL 3.0 (welches beim aktuellen nightly snapshot ja dabei ist) ist SHA-1 explizit als deprecated vermerkt (siehe https://www.openssl.org/docs/man3.0/man3/SHA1.html).

Hier sollte EasySmartHome/CloudMatic wirklich seitnah auf sha256 gehaste Zertifikate wechseln damit das alles wieder wasserdicht ist.

@jens-maus jens-maus added the 🔥 security relevant This is a security relevant issue/ticket label Sep 23, 2023
@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Sep 23, 2023

Ich poste da jetzt mal nicht die gesamten Ausgaben weil ich nicht weiß wie sensibel die Daten sind.
openssl x509 -in /usr/local/etc/config/addons/mh/ca.crt -text -noout --> Signature Algorithm: sha1WithRSAEncryption
openssl x509 -in /usr/local/etc/config/addons/mh/client.crt -text -noout --> Signature Algorithm: sha1WithRSAEncryption

Na dann hoffen wir mal das da zügig für mehr Sicherheit gesorgt wird.

Edit:
Ich hatte mir gestern auch nochmal frisch mein cert über die CloudMatic Webseite generieren lassen weil ich erst dachte da ist irgendwas abgelaufen. Das änderte aber nichts.

@jens-maus
Copy link
Owner

Dann sollte mal jemand EasySmartHome sagen sie sollen ihren OpenSSL befehlen zum generieren der Zertifikate die Option "-sha256" hinzufügen damit ihr ältere OpenSSL Version die sie da anscheinend haben auch Zertifikate mit sha256 hashes generiert. Also sowas wie:

openssl req -x509 -nodes -sha256 ...

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Sep 24, 2023

Ich habe jetzt mal eine Mail zum Thema über das CloudMatic Support System gesendet.
Schauen wir mal...

@DevEddy
Copy link

DevEddy commented Sep 25, 2023

Danke für die Meldung. Wir prüfen das Problem auf unserer Seite und geben hier Feedback, sobald es was Neues gibt.

@jens-maus
Copy link
Owner

Danke für die Meldung. Wir prüfen das Problem auf unserer Seite und geben hier Feedback, sobald es was Neues gibt.

Danke für die Rückmeldung @DevEddy. Bitte hier ggf. etwas schneller unterwegs sein, da spätestens sonst mit dem nächsten RaspberryMatic Release (aktuelle geplant für kommendes WE) es ggf. zu Problemen von Nutzer kommen wird.

@jens-maus
Copy link
Owner

jens-maus commented Sep 28, 2023

@DevEddy Schon irgendwelche Hinweise wann genau mit einer Änderung/Verbesserung diesbzgl. in CloudMatic zu rechnen ist? Ich möchte ungern hier den nächsten RaspberryMatic Release noch weiter hinauszögern...

DevEddy pushed a commit to EasySmartHome/CloudMatic-CCUAddon that referenced this issue Sep 28, 2023
@DevEddy
Copy link

DevEddy commented Sep 28, 2023

@jens-maus leider ist das nicht so einfach alle Zertifikate ohne Probleme und Unterbrechung für alle unsere Kunden auszurollen. Wir arbeiten daran, dass die Zertifikate in der Zukunft mit SHA256 ausgeliefert werden können.

In der Zwischenzeit möchten wir den oben genannten Workaround für RaspberryMatic nutzen. Das Problem hier ist, dass wir die client.conf auch nicht global für alle Systeme (CCU1, CCU2, CCU3) ausliefern können, da z.B. die CCU3 die Version openvpn 2.4.6 und OpenSSL 1.0.2p benutzt, wo dieser Parameter nicht funktioniert - CCU2 hingegen funktioniert. Mit dem letzten commit findet eine Prüfung statt, wo die Funktion von CloudMatic Connect erstmal weiterhin auf RaspberryMatic gegeben sein sollte.

@jens-maus
Copy link
Owner

jens-maus commented Sep 28, 2023

@DevEddy
Ok, danke für das Feedback. Kann ich prinzipiell verstehen das das ggf. schwer ist das jetzt für alle CloudMatic Nutzer nachzuziehen bzw. neue Zertifikate automatisch auszurollen. Trotzdem möchte ich nochmal explizit darauf hinweisen, dass die Nutzung des schon sehr lange obsoleten SHA1 hashing Algorithmus ein gewisses aktuelles Sicherheitsproblem in der CloudMatic Infrastruktur darstellt. Daher solltet ihr das entsprechend ernst nehmen und die Zertifikate wirklich so schnell wie möglich an eure Kunden ausrollen bzw. die Zertifikaterstellung schon jetzt serverseitig anpassen und falls sich Nutzer wieder manuell ein neues Zertifikat abholen bzw. generieren lassen, dann sollten nur noch SHA256 gehaste Zertifikate die mit einer modernen OpenSSL Verison generiert wurden auch ausgeliefert werden. Das ihr die nicht automatisch nun ausrollen lassen könnt ist verständlich. Aber die OpenSSL Versionen in der CCU2, CCU3 und RaspberryMatic sollten SHA256 gehashte Zertifikate problemlos nutzen/schlucken können. Es ist also IMHO letztlch nur eine Frage der Priorisierung und des Einsetzens von Entwicklerressourcen.

Das ihr nun stattdessen den Workaround (Anpassung der client.conf um die Option tls-cipher "DEFAULT:@SECLEVEL=0") aktuell bevorzugt, ist auch bis zu einem gewissen Grad nachvollziehbar und kann erst einmal die Funktionalität mit kommenden RaspberryMatic Versionen natürlich wieder herstellen. Allerdings möchte ich auch hier darum bitten, die oben erwähnte Aktualisierung eurer Zertifikatserstellung nicht auf die lange Bank zu schieben, denn sonst müsste ich darüber nachdenken ab einem gewissen Punkt eine Sicherheitswarnung bei der Nutzung von CloudMatic einzublenden wenn ein SHA1 gehashtes Zertifikat weiterhin zum Einsatz kommt bzw. werde ich mir dann vorbehalten ab einer gewissen zukünftigen RaspberryMatic Version diesen Workaround wieder rauszunehmen.

Bzgl. der Umsetzung dieses temporären Workarounds mittels Aktualsierung eures CloudMatic Addons habe ich folgende Hinweise:

  1. Das "diff" des committs zeigt das ihr/du in der Datei unglücklicherweise umlaute umkodiert habt (siehe EasySmartHome/CloudMatic-CCUAddon@152a651). Das bitte zurücknehmen.
  2. Bei dem "patchen" der /usr/local/etc/config/addons/mh/client.conf würde ich dafür plädieren einen zusätzlich check einzubauen der prüft ob das momentane Zertifikat SHA1 oder SHA256 nutzt und das erweitern der client.conf um die zeile tls-cipher ... dann entsprechend nur vorgenommen wird wenn SHA1 identifiziert wird und ggf. die tls-cipher Zeile wieder rausgelöscht wird wenn nur SHA256 zum einsatz kommt. Dann wäre das sofort zu dem Fall kompatibel wenn ihr eure Zertifikate dann SHA256 gehasht ausliefert.
  3. Ein weiteres problem bei der Einführung dieses Workarounds kann sein, das wenn ein Nutzer nun auf eine neuere Version updated wird dann seine client.conf ggf. zu früheren RaspberryMatic version inkompatibel. D.h. wenn er danach dann einen downgrade durchführt kann es sein das CloudMatic sich nicht mehr verbinden lässt. Ich würde daher vorschlagen, den patch der client.conf nicht direkt im /usr/local pfad durchzuführen, sondern ggf. die Datei erst nach /var/etc/... zu kopieren, dann dort zu patchen und dann aber openvpn mit der client.conf aus /var/etc heraus zu starten. Somit wäre die client.conf immer exakt die die ihr ausliefert bzw. die der Nutzer da auch runterlädt und lediglich beim start wird diese dann vorher kurz in einem tmpfs umgepatcht und dann diese modifizierte Variante bis zum nächsten reboot genutzt.

@jens-maus jens-maus added the 👍 important This is an important issue/ticket with high priority label Sep 28, 2023
@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Sep 28, 2023

umgepatcht und dann diese modifizierte Variante bis zum nächsten reboot genutzt.

Läuft der "Auto-Update" Cronjob nicht alle 6h und überschreibt dabei die client.conf?

DevEddy pushed a commit to EasySmartHome/CloudMatic-CCUAddon that referenced this issue Oct 4, 2023
DevEddy pushed a commit to EasySmartHome/CloudMatic-CCUAddon that referenced this issue Oct 4, 2023
…tificate, otherwise remove the workaround. Copy client.conf to cloudmatic_openvpnc_client.conf to /var/etc and use it for openvpn to support downgrading.

jens-maus/RaspberryMatic#2442
@DevEddy
Copy link

DevEddy commented Oct 4, 2023

@jens-maus ich habe die Änderungen jetzt umgesetzt. Falls noch was sein sollte, gib kurz Bescheid. Wie schon oben erwähnt werden wir die Zertifikate aktualisieren und "schieben es selbstverständlich nicht auf die lange Bahn".

@Baxxy13 nein, die client.conf wird an der Stelle nicht überschrieben. Zusätzlich dazu findet aber auch bei jedem Start des VPN-Dienstes eine Prüfung der Konfigurationsdatei statt.

@jens-maus jens-maus added this to the next release milestone Oct 5, 2023
@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 7, 2023

Na ich bin ja mal gespannt.
Nach meinen Test's funktioniert der "Workaround" nicht.

Grund:
Die "frische" loophammer.sh (die vorher bei Version 4.0 war und wieder auf 1.7 degradiert wurde) wird mit RaspberryMatic (dann) ausgeliefert und liegt somit in /opt/mh/user.

Das durch S97CloudMatic aufgerufene /opt/mh/startup.sh kopiert die "frische" loophammer.sh aber nur nach /usr/local/etc/config/addons/mh wenn das Verzeichnis nicht existiert, also i.d.R. beim erstmaligen Start von RaspberryMatic, Die "frische" loophammer.sh landet also bei regulären Systemen nicht in /usr/local/etc/config/addons/mh.

/opt/mh/startup.sh startet dann das VPN durch Aufruf der /usr/local/etc/config/addons/mh/loophammer.sh.
Das ist aber die alte Version ohne den Workaround.
Ergbnis:

daemon.err openvpn[1912]: OpenSSL: error:0A00018E:SSL routines::ca md too weak
daemon.err openvpn[1912]: Cannot load certificate file /usr/local/etc/config/addons/mh/client.crt

Abhilfe würde der Cron-Job für loopupd.sh bringen wenn der Cron-Job auf RM laufen würde und CloudMatic eine aktualisierte Version zum Herunterladen hätte.
Beides funktioniert auf meinem Hauptsystem nicht. Selbst mit manuell angestoßenem Update lädt mein Hauptsystem mit aktivem Account bis 2025 noch eine Version von 2021 runter in der natürlich auch die alte loophammer.sh ohne den Workaround steckt.

Die Lösung wäre auch simpel.
Man hätte in der /opt/mh/startup.sh statt der /usr/local/etc/config/addons/mh/loophammer.sh einfach die /opt/mh/user/loophammer.sh aufrufen müssen um die Workaround-Version zu nutzen.

Schauen wir mal...

@jens-maus jens-maus reopened this Oct 7, 2023
@jens-maus
Copy link
Owner

Na dann gehen wir zurück auf Start und hoffen @DevEddy kann das Problem final beseitigen damit der nächste RaspberryMazic Release nicht wieder auf sich warten muss.

@jens-maus
Copy link
Owner

Na ich bin ja mal gespannt. Nach meinen Test's funktioniert der "Workaround" nicht.

Grund: Die "frische" loophammer.sh (die vorher bei Version 4.0 war und wieder auf 1.7 degradiert wurde) wird mit RaspberryMatic (dann) ausgeliefert und liegt somit in /opt/mh/user.

Hab mir das jetzt mal selbst näher angeschaut und auch ich denke das der Workaround in loophammer.sh so nicht funktionieren wird den @DevEddy da umgesetzt hat. Einfach weil anscheinend es ein loophammer.sh unter /opt/mh/user gibt und es unter /usr/local/etc/config/addons/mh wobei letzteres wohl durch die zertifikatupdates bzw. herunterladbaren fake-addon archive mit ausgeliefert wird? Oder kommt die von der initialen Nutzung von CloudMatic?!? Es scheint auf jedenfall wohl keinen Weg zu geben wie man diese unter /usr/local von der unter /opt/mh akualisieren lassen kann. Ziemliches durcheinander das ganze...

Und die Versionsunterschiede bzgl. 4.0, 3.0 und 1.7 sehe ich hier bei meiner alten CloudMatic Testinstallation aus. Dort habe ich unter /usr/local die version 3.0 von loophammer.sh und unter /opt/mh liegt aber ne alte 1.7 version. Siehe hier:

--- /opt/mh/user/loophammer.sh
+++ /usr/local/etc/config/addons/mh/loophammer.sh
@@ -2,7 +2,7 @@
 #
 # **************************************************************************************************************************************************
 #
-# meine-homematic.de Hintergrund - Prozess Version 1.7, Stand 12.08.2010
+# meine-homematic.de Hintergrund - Prozess Version 3.0, Stand 05.04.2013
 #
 # Dies ist ein Benutzer - individualisiertes Skript
 #
@@ -14,6 +14,10 @@
 #
 # Changelog:
 # ===========
+#
+# Version 3.0
+# Anpassung an Datumsformat der CCU2
+#
 # Version 1.7: 
 # Fehler in der Datumsauswertung behoben
 #
@@ -23,15 +27,13 @@
 
   #Dienst Status einlesen
   dienst=`/bin/busybox cat $ADDONDIR/dienst`
-  dienstngx=`/bin/busybox cat $ADDONDIR/dienstngx`
-  dienstzbx=`/bin/busybox cat $ADDONDIR/dienstzbx`
 
   #
   # Teilbereich Hammering - Schutz
   # 
   nowdate=$(date +%s)
   # Enddatum wird individuell gesetzt, in Abhängigkeit der Schlüssel - Laufzeit
-  enddate=$(date -d "010123592010" +%s)
+  enddate=$(date -d "2022-02-22 23:59" +%s)
   if [ $enddate -ge $nowdate ] 
   then  
      #
@@ -44,37 +46,18 @@
 			ovstart=`/opt/mh/openvpn --daemon --config $ADDONDIR/client.conf --cd $ADDONDIR`
 		fi 
      fi
+  else
+     #
+     # Aktuelles Datum ist nach dem Enddatum. VPN beenden, um Hammering zu unterbinden
+     #
+     Processname=openvpn
+     if [ -n "`pidof $Processname`" ] ; then  
+       /bin/busybox logger -t homematic -p user.info "Keine meine-homematic.de VPN Lizenz aktiv, openvpn wird beendet."
+       /bin/busybox logger -t homematic -p user.info "Diest dient zum Schutz Ihrer HomeMatic, um permanente, ungültige Verbindungsversuche alle 10 Sekunden zu unterbinden."
+       dummy=`/bin/busybox killall openvpn`
+     fi
+  fi
 
-	if [ ! -e $ADDONDIR/zabbix.conf ] ; then
-		Processname=zabbix_agentd
-		if [ ! -n "`pidof $Processname`" ] ; then  
-			/bin/busybox logger -t homematic -p user.info "CloudMatic monitoring Dienst wird gestartet"
-			ovstart=`/opt/mh/user/zabbix_agentd -c /etc/config/addons/mh/zabbix.conf >/dev/null 2>&1`
-		fi
-	fi
-
-	Processname=nginx
-	if [ ! -n "`pidof $Processname`" ] ; then  
-		/bin/busybox logger -t homematic -p user.info "Reverse Proxy Dienst wird gestartet"
-		ovstart=`/opt/mh/user/nginx`
-	fi
- else
-    #
-    # Aktuelles Datum ist nach dem Enddatum. VPN beenden, um Hammering zu unterbinden
-    #
-    Processname=openvpn
-    if [ -n "`pidof $Processname`" ] ; then  
-      /bin/busybox logger -t homematic -p user.info "Keine meine-homematic.de VPN Lizenz aktiv, openvpn wird beendet."
-      /bin/busybox logger -t homematic -p user.info "Diest dient zum Schutz Ihrer HomeMatic, um permanente, ungültige Verbindungsversuche alle 10 Sekunden zu unterbinden."
-      dummy=`killall -9 openvpn`
-    fi
-	Processname=nginx
-	if [ -n "`pidof $Processname`" ] ; then  
-		/bin/busybox logger -t homematic -p user.info "Reverse Proxy wurde herunter gefahren"
-		dummy=`killall -9 nginx`
-	fi
- fi
-
   
   #Wenn Dienst läuft beenden, falls Dienst = 0
     if [ $dienst -lt 1 ] ; then
@@ -82,13 +65,5 @@
 		if [ -n "`pidof $Processname`" ] ; then  
 			/bin/busybox logger -t homematic -p user.info "VPN Dienst wurde ueber Systemsteuerung beendet"
 			dummy=`/bin/busybox killall openvpn`
-		fi
-	fi
-
-    if [ $dienstngx -lt 1 ] ; then
-		Processname=nginx
-		if [ -n "`pidof $Processname`" ] ; then  
-			/bin/busybox logger -t homematic -p user.info "Reverse Proxy wurde herunter gefahren"
-			dummy=`killall -9 nginx`
 		fi
 	fi

Und die Version die im GitHub liegt ist wohl auch Asbach-Uralt. Siehe:

https://github.com/EasySmartHome/CloudMatic-CCUAddon/blob/master/user/loophammer.sh

Insofern denke ich also auch das hier noch nachgearbeitet werden muss damit das ganze konsistent am Ende wird, da das einfach updaten der loophammer.sh unter /opt/mh nicht dazu führen wird das dann bei bestehenden Installationen die eigentlich genutzte loophammer.sh die ja unter /usr/local liegt mit geupdated wird...

Und ehrlich gesagt hab ich noch nie wirklich kapiert warum die CloudMatic Dinge da teilweise zwischen /opt/mh und /usr/local/etc/config/addons/mh/ gedoppelt rumliegen und wie die sich konkret dann updaten, usw...

@jens-maus
Copy link
Owner

Die Lösung wäre auch simpel. Man hätte in der /opt/mh/startup.sh statt der /usr/local/etc/config/addons/mh/loophammer.sh einfach die /opt/mh/user/loophammer.sh aufrufen müssen um die Workaround-Version zu nutzen.

Nachdem ich mir das ganze Durcheinander bzgl. CloudMatic Addon etwas mehr angeschaut habe, denke ich nicht das die Lösung so einfach wäre, denn die loophammer.sh wird auch noch in anderen Sekundärskripten direkt aus /usr/local heraus aufgerufen. Wenn dann müsste man die gesamte Logik dahingehen ändern, das die looperhammer.sh aber immer von /opt/mh direkt aufgerufen wird, oder @DevEddy erklärt wie genau die ganze Logik dahinter bitte ist bzw. /opt/mh vs. /usr/local/etc/config/addons/mh/ und wie das letztere genau bitte geupdated wird und dann ein neues loophammer.sh abbekommen soll?!? Vielleicht übersehen wir da ja noch was?

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 8, 2023

Ich hatte mich nicht getraut das ganze Konstrukt zu kritisieren. Das ist in der Tat ein ziemliches Durcheinander und ich habe für mich einen "Ablauf-Plan" erstellt um nachzuvollziehen wer / was /wie / wo passiert.
Aus meiner Sicht das einfachste wäre, wenn CM ihre "Online-Update-Pakete" zumindest mit der Workaround loophammer.sh aktualisiert und der User dann halt einmalig updaten muss (der Cron-Job funktioniert bei mir nicht) um auf aktuellem Stand zu sein.

Das ganze allgemein Aufzuräumen wäre natürlich auch nicht verkehrt.

@jens-maus
Copy link
Owner

Ich hatte mich nicht getraut das ganze Konstrukt zu kritisieren. Das ist in der Tat ein ziemliches Durcheinander und ich habe für mich einen "Ablauf-Plan" erstellt um nachzuvollziehen wer / was /wie / wo passiert.

Wenn du diesen "Ablaufplan" hier mal teilen könntest wäre das IMHO sehr gut. Ist schon ziemlich verworren wie diese zich sh scripte miteinander interagieren und für mich sieht das so aus das es da auch zich skripte gibt die schon lange obsolete sind. Wenn du also mal dein Wissen teilen könntest wäre das super für das allgemeine Verständnis wie das CloudMatic Addon genau mit einer CCU interagiert, usw.

Das ganze allgemein Aufzuräumen wäre natürlich auch nicht verkehrt.

Das wäre definitiv mal ne Aufgabe für EasySmartHome. Zumindest mal alle obsoleten Teile des Addon rauszuwerfen wäre IMHO super. Auch sehe ich z.B. einige stellen wo immer noch via wget/curl Dinge (sogar die Keys) via unverschlüsseltem http:// heruntergeladen wird. Das ist IMHO zusätzlich zu der hier vorgebrachten SHA1 Problematik schon bezogen auf die Sicherheit mehr als suboptimal und hebt nicht gerade mein Vertrauen gegenüber den CloudMatic/EasySmartHome Diensten...

@DevEddy
Copy link

DevEddy commented Oct 9, 2023

Der Workaround ist generell so wie dieser hier durchgeführt wurde in Ordnung und kann genutzt werden.

@Baxxy13 das Problem ist, dass die vor dem Workaround generierten Schlüsseldateien der Nutzer den Workaround noch nicht haben - inklusive dir. Diese Schlüsseldatei wird nur mit der CloudMatic-Aktualisierung auf der Zentrale oder via direkter Installation ausgeliefert. Warum die Dateien so hinterlegt sind, hat interne und technische Gründe, da wir mehrere arten von Zentralen unterstützten. Wende dich bitte kurz an unseren Support oder teile mir deine CloudMatic ID damit ich deinen Schlüssel neu generieren kann.

@jens-maus die http:// werde ich zur Behebung aufnehmen. Die Optimierung des CloudMatic Addon's auf der Zentrale steht auf unserer Entwicklungsliste.

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 9, 2023

Alles klar, ich werde dann später über den Support-Weg die Neugenerierung meines Key's beantragen.
Ich bin davon ausgegangen daß das Key-Update automatisch von Euch generiert wird und ich halt nur z.B. das manuelle Update händisch anstoßen muss.

Das dürfte dann nach dem Release der nächsten RM für euren Support interessant werden wenn der Workflow so bleibt.

@jens-maus
Copy link
Owner

Der Workaround ist generell so wie dieser hier durchgeführt wurde in Ordnung und kann genutzt werden.

@Baxxy13 das Problem ist, dass die vor dem Workaround generierten Schlüsseldateien der Nutzer den Workaround noch nicht haben - inklusive dir. Diese Schlüsseldatei wird nur mit der CloudMatic-Aktualisierung auf der Zentrale oder via direkter Installation ausgeliefert. Warum die Dateien so hinterlegt sind, hat interne und technische Gründe, da wir mehrere arten von Zentralen unterstützten. Wende dich bitte kurz an unseren Support oder teile mir deine CloudMatic ID damit ich deinen Schlüssel neu generieren kann.

@DevEddy
Also versteh ich das jetzt richtig? Du/Ihr seid der Meinung das das so nun i.O. ist wie das aktuell im Nightly umgesetzt ist? Tangiert mich selbst ja nicht viel, aber auch ich denke das wird einen gewissen "Sturm" an Support-Anfragen hier aber eben dann auch bei euch auslösen wenn das nicht out-of-the-box funktioniert, sondern jeder dann erst sein Schlüssel neu generieren lassen muss oder auch manuell selbst runterladen muss. Suboptimal, würde ich sagen, weil letztendlich geht es doch nur darum das nun die openvpn conf datei mit tls-cipher "DEFAULT:@SECLEVEL=0" Eintrag ausgestattet wird damit eure veralteten SHA1 gehashten Zertifikate damit noch funktionieren bis ihr die ausgetauscht habt. Und es wäre doch eigentlich wirklich nicht gut wenn nun jeder CloudMatic Nutzer erst sein Zertifikatbundle neu runterladen müsste damit da drin dann die loophammer.sh drin ist die diesen workaround umsetzt... Aber gut, das ist am Ende eure Entscheidung. Bitte mir nur kurz mitteilen das das so nun definitiv i.O. ist, dann geht der neue RaspberryMatic Release in den nächsten Tagen so raus wie das nightly build aktuell ist.

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 9, 2023

In der Theorie ist es nicht ganz so kompliziert. Man müsste halt nur seinen Key updaten lassen, sollte das nicht eventuell doch automatisch durch CM gemacht werden.
Der "alle 6h Cron-Job" loopupd.sh würde dann die aktualisierte Version herunterladen und mittels update.sh die Dateien updaten.
Der andere "alle 6h Cron-Job" cloudmaticcheck.sh würde beim nächsten Durchlauf die aktualisierte loophammer.sh nutzen, die client.conf patchen und das Thema ist durch.

Tja, in der Praxis werden die Cron-Jobs nicht automatisch angelegt, es braucht einen CloudMatic Restart damit das passiert.
Siehe: EasySmartHome/CloudMatic-CCUAddon#13

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 10, 2023

Also das mit dem Support war ein Satz mit x.
Auf meine Bitte, meinen persönlichen Schlüssel zu aktualisieren, bekam ich als Antwort das der Workaround mit der nächsten RM ausgerollt wird und ich bei Problemen ein manuelles Update anstoßen solle.
(was mir nix bringt da mein altes Schlüssel-Packet von 2021 ist und die Aktualisierung nicht enthält)

Mein Einwand, das der Workaround ohne aktualisiertes Schlüssel-Paket wirkungslos ist, blieb bisher unbeantwortet.
(oder kam nicht an da ich nur replyed hatte)

Kein gutes Zeichen.

Darum bitte ich @DevEddy hier direkt meinen persönlichen Schlüssel für CM-ID: xxx zu aktualisieren, damit ich final testen kann ob das dann alles wie geplant funktioniert.

Edit:
mein persönlicher Schlüssel wurde nun aktualisiert, aber der Workaround hat erstmal nicht funktioniert.
Das gucke ich mir nun genauer an.

@DevEddy
Copy link

DevEddy commented Oct 10, 2023

@Baxxy13 sorry für das Missverständnis - ich habe dir den Schlüssel neu generiert. Die Problematik mit den Cronjobs schauen wir uns auch an. Auf den ersten Blick sieht es so aus, als gab es Änderungen am System, was dazu führt, dass diese bei jedem Reboot neu angelegt werden müssten - ich denke, dass wir dazu ein init-Skript bräuchten - mehr Infos folgen dann in dem von dir erstellten Issue.

@jens-maus so wie es im nightly ist, kann ausgerollt werden. Wir sind uns bewusst, dass dies einen erhöhtes Supportaufkommen für bestehende Konten bedeuten könnte.

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 10, 2023

Danke @DevEddy , das mit dem aktualisierten Schlüssel hat nun geklappt.

so wie es im nightly ist, kann ausgerollt werden

Sorry für die harten Worte, aber ihr habt das nicht getestet!
Also 6... setzen. 😉
Letztlich ist es auch (beinahe) egal was in /opt/mh liegt, es spielt sich alles in /usr/local/etc/config/addons/mh/ ab und ohne aktualisierten "persönlichen Schlüssel" muss der Nutzer selbst Hand anlegen.

Zurück zum Workaround:

Leider muss ich sagen das es mit dem Workaround direkt nach einem manuellen Update (mit meinem aktualisierten persönlichen Schlüssel) nicht funktioniert.

Warum das nicht funktioniert ist auch schnell ergründet:

Problem Nr.1:
(Ich gehe davon aus das der Nutzer einen aktualisierten Schlüssel hat generieren lassen, so wie ich.
Ohne den geht eh nix)

"Manuelles Update" führt /usr/local/etc/config/addons/mh/loopupd.sh aus.
Neues Zeug wird heruntergeladen, geprüft usw.
Dann wird /usr/local/etc/config/addons/mh/update.sh aufgerufen.
Das macht alles mögliche, und am Ende wird das openvpn mit der ungepatchten client.conf gestartet.

`ovstart=`/opt/mh/openvpn --daemon --config $ADDONDIR/client.conf --cd $ADDONDIR`

Problem Nr. 2:
Im Workaround patcht ihr bei Bedarf die /usr/local/etc/config/addons/mh/client.conf
Das VPN startet ihr aber anschließend mit der ungepatchten /var/etc/cloudmatic_openvpn_client.conf.

Problem Nr. 3:
Hatte ich ja schon erwähnt, die Cron-Jobs laufen nicht, daher bleibt Problem 2 bestehen.
Gäbe es Problem 3 nicht würde sich Problem 2 nach 2 Durchläufen von loophammer.sh von selbst lösen.
(beim 1. Durchlauf wird die /usr/local/etc/config/addons/mh/client.conf gepatcht, beim 2. Durchlauf wird die gepatchte Version nach /var/etc kopiert und genutzt.)

Lösen lassen sich Problem 1 und 2 recht einfach, bei 3 bin ich auch überfragt.

Wenn ihr eure Dateien auf Github mal aktualisieren würdet, könnte ich Diffs bereitstellen die 1 & 2 adressieren und den Workaround wenigstens lauffähig machen.

@jens-maus
Copy link
Owner

@DevEddy
Ich denke leider immer noch, das die Umsetzung des "Workaround" wirklich im Bezug auf die Nutzer suboptimal ist und transparenter zu den Nutzerarchiven abzulaufen hat. Daher ist die Umsetzung in der loophammer.sh IMHO wirklich nicht der richtige Ort. Ich habe daher mal einen PR rausgehauen der das Problem an der Wurzel packt und stattdessen ein wrapper script als /opt/mh/openvpn verwendet wird statt des einfachen symbolischen links wie bisher. In diesem wrapper script wird nun die client conf entsprechend vor dessen benutzung umgepatcht falls das zertifikat immer noch SHA1 verwendet und dann final openvpn damit gestartet. Siehe:

EasySmartHome/CloudMatic-CCUAddon#14

Ich würde daher vorschlagen, @Baxxy13 sollte diese Umsetzung dieses PR einmal entsprechend auf Herz&Nieren testen der so IMHO wesentlich transparenter und nutzerfreundlicher sein sollte. Und dann merged du diesen PR, sodass ich die Umsetzung dann so in RaspberryMatic aufnehmen kann.

Unabhängig davon aber nochmal die Warnung bzw. der Hinweis, das dies wirklich nur ein temporärer Workaround darstellen soll und ich diesen bei gelegenheit in zukünftigen Versionen (spätestens Anfang nächsten Jahres) zurückrollen werde. Ihr solltet euch also IMHO daran machen die Nutzerzertifikate schnellstmöglichst auf SHA256 (oder noch besser SHA384) umzustellen um wieder für bessere Sicherheit zu sorgen, denn meines Wissens hat eQ3 auch bereits ein Auge auf dieses Ticket hier geworfen und auch av-test.org wird sicherlich nicht amused darüber sein, das Ihnen in der letzten Testung der CloudMatic der Umstand der weiterhin breiten SHA1 Zertifikationsnutzung durch die Lappen gegangen ist (siehe https://www.iot-tests.org/de/2023/08/zum-2-mal-rezertifiziert-easy-smarthome-cloudmatic-smartha-app/)

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 11, 2023

So, die Tests sind abgeschlossen.
👍 ... für den PR, funktioniert.

Hab's jetzt mit 2 Systemen getestet. (Nightly 3.71.12.20231010-969f2c)
Revoken musste ich den "CloudMatic-Workaround" nicht, da die /opt/mh/user/loophammer.sh sowieso niemals zum Zuge kommt.
Dafür habe ich den PR eingepflegt.

System A hat noch das alte Schlüsselpaket ohne den versemmelten Workaround, also mit "alter" loophammer.sh.
Die /usr/local/etc/config/addons/mh/client.conf bleibt unangetastet, OpenVPN startet problemlos mit den bekannten Warnungen.

Oct 11 18:36:06 116-RM-CCU user.info homematic: cloudmatic.de loophammer startet openvpn.
Oct 11 18:36:06 116-RM-CCU daemon.warn openvpn[28446]: WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
Oct 11 18:36:06 116-RM-CCU daemon.warn openvpn[28446]: WARNING: file '/usr/local/etc/config/addons/mh/client.key' is group or others accessible
Oct 11 18:36:06 116-RM-CCU daemon.warn openvpn[28447]: WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.

System B hat das aktuelle Schlüsselpaket mit dem versemmelten Workaround, also mit "neuer" loophammer.sh.
Der Workaround wird in die /usr/local/etc/config/addons/mh/client.conf geschrieben, OpenVPN startet aber problemlos mit den bekannten Warnungen.

Oct 11 18:50:54 RM-Test-VM-96 user.info homematic: cloudmatic.de loophammer startet openvpn.
Oct 11 18:50:54 RM-Test-VM-96 daemon.warn openvpn[1836]: WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
Oct 11 18:50:54 RM-Test-VM-96 daemon.warn openvpn[1836]: WARNING: file '/usr/local/etc/config/addons/mh/client.key' is group or others accessible
Oct 11 18:50:54 RM-Test-VM-96 daemon.warn openvpn[1837]: WARNING: --ns-cert-type is DEPRECATED.  Use --remote-cert-tls instead.

Zusammengefasst:

Der PR funktioniert mit "neuen" und "alten" Schlüsselpaketen gleichermaßen problemlos.
Das bei den "neuen" die /usr/local/etc/config/addons/mh/client.conf geändert wird ist unschön, aber auf den Fehler in der "Workaround-Implementierung" seitens CloudMatic zurückzuführen.

Problem Nr. 2:
Im Workaround patcht ihr bei Bedarf die /usr/local/etc/config/addons/mh/client.conf

Edit an @jens-maus
Ohne Tailscale hätte ich die Test's am Hauptsystem gar nicht machen können. 😉

@jens-maus
Copy link
Owner

Ok, danke für das Feedback. Hab inzwischen (wie du vllt. schon gesehen hast) schon den Commit mit dem PR als die neue CloudMatic Addon version für RaspberryMatic integriert. D.h. mit dem nächsten nightly snapshot wird mein wrapper script unter /opt/mh/openvpn dann so mit dabei sein und die loophammer.sh wieder ohne den verpatzten workaround ausgeliefert. Ich denke @DevEddy müsste dann nur noch dafür sorgen das auch die loophammer in den Archiven für die Downloads wieder "normal" bzw. auf die alte Version zurückgesetzt wird, denn mit der Umsetzung via wrapper script braucht es all diese "Magie" eigentlich nicht mehr und man könnte sich nun einfach darauf konzentrieren die SHA256/SHA384 gehashten Zertifikate stattdessen auszuliefern, denn wie gesagt kann das auch schon die älteren openvpn versionen der CCU2/CCU3 so verarbeiten.

@jens-maus
Copy link
Owner

Nachdem mein PR nun im GitHub des Addons gemerged wurde mach ich nun auch mal wieder zu und würde bitten den nächsten nightly build nochmal auf Herz+Nieren bzgl. CloudMatic zu testen da ich vorhabe nun für kommendes Wochenende eine neue stable Version herauszubringen.

@Baxxy13
Copy link
Contributor Author

Baxxy13 commented Oct 12, 2023

Ich kann nicht versprechen das ich morgen noch zum testen des Nightly's komme, es sei denn er ist morgens nach dem Käffchen verfügbar. 😉

Da aber die Änderungen zum heutigen Nightly nicht so groß ausfallen bin ich guter Dinge das das läuft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
➡️ third-party issue This is a bug/issue for/in other third-party software 🐛 bug-report Something isn't working 🔥 security relevant This is a security relevant issue/ticket 👍 important This is an important issue/ticket with high priority 🧠 unstable-snapshot This ticket references the use of an unsupported unstable snapshot being used.
Projects
None yet
Development

No branches or pull requests

3 participants