jens-maus / RaspberryMatic

:house: A feature-rich but lightweight, buildroot-based Linux operating system alternative for your CloudFree CCU3/ELV-Charly 'homematicIP CCU' IoT smarthome central. Running as a pure virtual appliance (ProxmoxVE, Home Assistant, LXC, Docker/OCI, Kubernetes/K8s, etc.) on a dedicated embedded device (RaspberryPi, etc.) or generic x86/ARM hardware.
https://raspberrymatic.de
Apache License 2.0
1.56k stars 192 forks source link

Upload von ECC HTTP Zertifikaten nicht möglich #2126

Closed centertivevier closed 1 year ago

centertivevier commented 1 year ago

Describe the issue you are experiencing

Raspberrymatic unterstützt leider keine eigenen Zertifikate, welche auf elliptischen Kurven basieren (ECC).

Da in auf der Raspberrymatic ein Lighttpd läuft, sollte es doch eigentlich gehen?

Describe the behavior you expected

Normalerweise sollte der Upload eines ECC Zertifikat genauso funktionieren wie mit einem klassichen RSA Zertifikat. Beim hochladen wird aber sofort abgebrochen mit der Meldung "Ungültiges Zertifikat".

Steps to reproduce the issue

  1. Zertifikat erstellen (Bei einer CA zum Beispiel)
  2. Hochladen über die WebUI
  3. Sofortige Fehlermeldung mit "ungültiges Zertifikat"

What is the version this bug report is based on?

3.65.11.20221218

Which base platform are you running?

rpi3 (RaspberryPi3)

Which HomeMatic/homematicIP radio module are you using?

RPI-RF-MOD

Anything in the logs that might be useful for us?

/

Additional information

No response

jens-maus commented 1 year ago

Konkretes Beispiel bitte eines solchen "ECC" Zertifikates das angeblich nicht funktioniert. Am besten hier einfach die entsprechenden openssl Befehle zur generieren eines solchen Zertifikates angeben. Prinzipiell sollten jedoch sämtliche heutzutage gängigen Zertifikate nutzbar sein.

centertivevier commented 1 year ago

Gerne doch:

openssl ecparam -out server.key -name secp384r1 -genkey
openssl req -new -key server.key -out server.csr -sha384

Die CSR lässt du dir dann einfach signieren von einer CA. Nun packst du das Ganze in eine Datei (Wie das RSA Zertifikat). Das sieht dann komplett so aus:

-----BEGIN EC PARAMETERS-----
ABC
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
XXXXXX
-----END EC PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
ABCDEF
-----END CERTIFICATE-----

Setze ich die gleiche Datei bei einem Lighttpd auf nem Raspbian ein, dann nimmt der die ohne Probleme. Verfahre ich nach dem gleichen Prinzip mit einem RSA Zertifikat:

openssl genrsa -aes256 -out server.key 4096
openssl req -new -key server.key -out server.csr -sha384

Dann lasse ich das signieren und baue mir wieder eine Datei für RSA. Die sieht dann so aus:

-----BEGIN PRIVATE KEY-----
ABC
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
ABCDE
-----END CERTIFICATE-----

Dann klappt das ohne Probleme.

Ein Passwort ist nicht vergeben für die Dateien

jens-maus commented 1 year ago

Das muss eigentlich gehen. Hast du probiert einfach die /etc/config/server.pem direkt im Dateisystem mit deiner datei zu ersetzen und dann lighttpd einfach mit monit restart lighttpd neuzustarten, dann sollte danach das WebInterface damit auch funktionieren. Ggf. hat ja nur der WebUI upload mechanismus eine Macke.

jens-maus commented 1 year ago

Da haben wir es doch:

https://github.com/eq-3/occu/blob/31209451965b495bd8bae3fba7071a5c876aafd6/WebUI/www/config/cp_network.cgi#L259

D.h. der Upload-Mechanismus erkennt einfach die Datei nicht weil es das -----BEGIN EC PRIVATE KEY----- nicht kennt (wegen dem EC). Aber der lighttpd wird das schon schlucken und damit arbeiten.

centertivevier commented 1 year ago

Bin ich nicht drauf gekommen mit SSH (Erneuere grade massenweise das Zertifikat im Heimnetz). Grade die Datei über SSH eingespielt. Klappt ohne Probleme. Danke dir für den schnellen Support.