Ankündigung

Einklappen
Keine Ankündigung bisher.

[HowTo] SSL mit Nginx

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [HowTo] SSL mit Nginx

    Hallo,
    da ich die letzten 2 Tage damit verbracht habe auf dem Smarthome.pi Image einen Nginx mit SSL (opt. Client Auth) zum laufen zu bringen, wollte ich euch das nicht vorenthalten. Ein großteil der Anleitung bezieht sich auf https://knx-user-forum.de/smarthome-...mit-nginx.html (Danke an mknx und felix86)

    Ziel des ganzen ist es, den Zugriff auf die SmartVisu und den Smarthome WebSocket über einen Port und mit SSL verschlüsselt bereitszustellen

    Zunächst muss ihr den lighttpd stoppen:

    Code:
    /etc/init.d/lighttpd stop
    Nun muss der Nginx installiert werden. Die Version aus dem aktuellen Raspbian 7.8 Repo (Version 1.2.1) funktioniert leider nicht mit WebSockets. Entweder nehmt ihr das von mit bereitgestellte Packet (nginx_1.6.2-1~wheezy_armhf.deb.zip) oder baut euch den Nginx selber auf dem System. Das zip entpacken und installieren:

    Code:
    unzip nginx_1.6.2-1~wheezy_armhf.deb.zip
    dpgk -i nginx_1.6.2-1~wheezy_armhf.deb
    Da die Smartvisu mit Fastcgi arbeitet benötigen wir noch php-fpm

    Code:
    apt-get install php5-fpm
    Für die Config vom nginx wird zuächst der Inhalt der Datei /etc/nginx/conf.d/default auskommentier. Die Config für Smartvisu legen wir als /etc/nginx/conf.d/smarthome an (bold muss angepasst werden). Die Einträge ssl_client_certificat und ssl_verify_client sind optional für die Client Authentifizierung.

    Code:
    server {
            listen 443 ssl;
            server_name [B]hostname.domain[/B];
    
            ssl_certificate [B]/etc/pki/certs/server.pem[/B];
            ssl_certificate_key [B]/etc/pki/certs/server.key[/B];
            ssl_client_certificate [B]/etc/pki/ca/ca.crt[/B];
            ssl_verify_client on;
    
            location / {
                    root /var/www/smartvisu;
                    index index.html index.php;
                    if ($http_upgrade = websocket) {
                            proxy_pass http://localhost:2424;
                    }
            }
    
            location ~ \.php$ {
                    root /var/www/smartvisu;
                    fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_param  SCRIPT_FILENAME  /var/www/smartvisu/$fastcgi_script_name;
                    include fastcgi_params;
            }
    }
    
    server {
            listen 80;
            server_name [B]hostname.domain[/B];
            return 301 https://$server_name$request_uri;
    }
    Nginx und php-fpm müssen wegen den Berechtigungen unter dem Admin user laufen. Hierfür muss in den Dateien /etc/nginx/nginx.conf und /etc/php5/fpm/pool.d/www.conf www-data durch admin ersetzt werden.

    Damit der Websocket auch mit SSL funktioniert, müssen in den Dateien /var/www/smartvisu/driver/io_smarthome.py.js und /var/www/smartvisu/driver/io_smarthome.py.min.js "ws://" durch "wss://" ersetzt werden. Diese Anpassungen müsst ihr nach jedem update durchführen.

    Zusätzlich muss für die Smartvisu der Port noch von 2424 auf 443 geändert werden. Dies kann entweder in der GUI oder über die /var/www/smartvisu/config.php erfolgen.

    Jetzt den php-fpm und nginx noch einmal neu starten und alles sollte laufen:
    Code:
    /etc/init.d/php5-fpm restart
    /etc/init.d/nginx restart
    Hoffentlich habe ich nichts vergessen
    Angehängte Dateien
    Gruß Sven

    #2
    Hallo apoc4lyps,
    Ich finde es gut das du deine Arbeit hier mit uns teilst.
    Ich könnte deine Ausführungen bestimmt nachvollziehen und auch bei mir einarbeiten, aber ich hab es leider nicht versanden. Könntest du mir bitte kurz erklären warum du einen anderen Webserver verwenden möchtest. Wo sind die Vorteile oder Nachteile oder war es nur eine Fingerübung für dich

    Bitte versteh das nicht als Kritik. Es interessiert mich wirklich.
    Danke

    Gruß Stefan

    Kommentar


      #3
      Moin Stefan,
      Ziel des ganzen war es, die SmartVisu und den Smarthome WebSocket über einen Port und mit SSL verschlüsselt bereitzustellen. Den vorhandenen WebServer habe nicht verwendet, da er meines Wissens nach keinen WebSocket Proxy unterstützt (mit dem nginx kenne ich mich auch besser aus).
      Gruß Sven

      Kommentar


        #4
        Cool.

        Danke

        Kommentar

        Lädt...
        X