FHEM SSL-Client-Zertifikat ohne Apache

Begonnen von zYloriC, 18 September 2014, 14:14:40

Vorheriges Thema - Nächstes Thema

zYloriC

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

rudolfkoenig

FHEMWEB fuehrt z.Zt. keine Client-Zertifikat-Pruefung durch.
Programmieren kann man es bestimmt.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

zYloriC

ok. Super vielen Dank an die schnelle Hilfe von euch beiden Experten. Ich werde mich an den Apache ran-machen ;)

betateilchen

#4
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Alcamar

sollte nginx nicht auch eine Alternative sein, die keine große Auswirkung auf die Performance hat?