Hallo zusammen,
ich würde den Zugriff auf mein Raspberry-fhem gerne per Zertifikat absichern. Dazu habe ich mich mit dem bekannten Link befasst: https://gist.github.com/gbirke/8608543
Meine Frage ist nun, ob solche Zertifikate auch ohne die zusätzliche Installation von Apache möglich ist.
Die fhem-Oberfläche läuft ja bereits auf einem Webserver, den fhem bereitstellt. Kann man für diesen auch die Lösung mit den Zertifikaten adaptieren?
Ich möchte einen SSL-Cert-Apache vermeiden um Ressourcen zu sparen.
Gruß, zYloriC
FHEMWEB fuehrt z.Zt. keine Client-Zertifikat-Pruefung durch.
Programmieren kann man es bestimmt.
Ich hab mich mit dem Thema schon länger befasst. Ja, man könnte es programmieren. Aber der Aufwand steht für mich in keiner Relation zum Nutzen, zumal mit einem Apache als ReverseProxy eine gute Lösung bereits existiert. Auf dem Raspberry sehe ich durch den Einsatz eines Apache grundsätzlich keine Ressourcenprobleme, das funktioniert bei mir seit längerem völlig störungsfrei.
Um eine SSL Prüfung in fhem umzusetzen, werden eine ganze Reihe weiterer perl-Module benötigt, was der Performance auch nicht sonderlich zuträglich ist. Ausserdem ist der "Webserver" in fhem ohnehin nicht der performanteste, was man an regelmäßigen "SSL Fehlern" erkennt, die alleine schon dann passieren, wenn man den lokalen Zugriff auf fhem per https anstatt http aktiviert hat.
ok. Super vielen Dank an die schnelle Hilfe von euch beiden Experten. Ich werde mich an den Apache ran-machen ;)
Zitat von: zYloriC am 18 September 2014, 17:38:29
Ich werde mich an den Apache ran-machen
Falls es Dir weiterhilft, will ich Dir kurz beschreiben, wie ich das gelöst habe. Ziel war, beim Aufruf von fhem.betateilchen.de
- eine sichere Verbindung zwischen Server und Client per https zu bekommen
- eine SSL-basierte Authentifizierung des Client am Server zu erzwingen
In meiner Apache Konfiguration gibt es eine vhost-Definition für den fhem-Bereich:
<VirtualHost *:443>
ServerName fhem.betateilchen.de
SSLEngine on
SSLCertificateFile /etc/ssl/certs/fhem_betateilchen_de.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateChainFile /etc/ssl/certs/fhem_betateilchen_de.ca-bundle
SSLCACertificateFile /etc/ssl/certs/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 1
ProxyPass / http://localhost:8083/fhem
ProxyPassReverse / http://localhost:8083/fhem
</VirtualHost>
<Proxy *>
Allow from 127.0.0.1
</Proxy>
Dies Definition besteht aus vier Teilen.
- Servername
- SSL Identität des Servers (die Zeilen SSLCertificateFile bis SSLCertificateChainFile
- SSL Anmeldung erzwingen (die Zeilen SSLCACertificateFile bis SSLVerifyDepth
- die Proxy Engine (die Requests an fhem.betateilchen.de werden an fhem weitergeleitet). Da die Weiterleitung innerhalb des gleichen Servers erfolgt, habe ich auf die SSL Anbindung von fhem selbst verzichtet.
Wenn ich nun versuche, die Webseite fhem.betateilchen.de aufzurufen, werde ich von Google Chrome zuerst aufgefordert, ein Client-Zertifikat für die Anmeldung auszuwählen:
(http://up.picr.de/19563871zg.jpg)
Danach wird die Verbindung zu fhem hergestellt und automatisch per SSL (erkennbar an https in der URL Zeile) an meinen Browser ausgeliefert:
(http://up.picr.de/19563872tg.png)
Die Automatische SSL Auslieferung erfolgt über eine Rewrite Regel in meiner zentralen Apache Konfiguration:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
DocumentRoot /var/www/
</VirtualHost>
Damit werden alle auf Port 80 ankommenden Requests automatisch in eine https-URL umgeschrieben und an den Apache übergeben.
sollte nginx nicht auch eine Alternative sein, die keine große Auswirkung auf die Performance hat?