Comment passer en wss (Web Socket Secure)?

Bonjour,

Je souhaiterais utilise les Web Sockets en mode « Secure » (wss). Côté http, je suis déjà en https avec un certificat Let’s Encrypt installé avec Cerbot sur l’apache du Jeedom.

Quelles sont les modifications à effectuer côté Apache pour pouvoir être en wss ?

Merci d’avance.

2 « J'aime »

Je me réponds à moi-même … J’ai essayé des modifications dans le fichier 000-default-le-ssl.conf (les modifications par rapport au fichier généré par cerbot sont les lignes qui commencent par « Proxy ») =>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ProxyRequests Off
        ProxyPreserveHost On

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog /var/www/html/log/http.error

        ServerName server.example.com

        ProxyPass /ws/  ws://192.168.0.155:7899/
        ProxyPassReverse /ws/  ws://192.168.0.155:7899/

SSLCertificateFile /etc/letsencrypt/live/boxdomotiquechoupi.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/boxdomotiquechoupi.ddns.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

Résultat : cela ne fonctionne toujours pas (j’ai un time-out à la connexion côté appli JC).

A noter que j’ai aussi changé dans l’appli l’adresse externe & interne websocket en mettant wss à la place de ws.

Bonjour,
Je serais aussi intéressé par la fonctionnalité.
2 options :

  • celle que vous cherchez à mettre en place, à savoir un reverse proxy géré par un serveur web, apache2, en l’occurrence.
  • une gestion native en code PHP. Le serveur ws implémenté dans ce fichier. Cela est issu du projet RatchetPHP qui semble être capable de gérer le wss.
    Je n’ai pas eu le temps de chercher, mais il y a des exemples de code à tester dans cet issue : https://github.com/ratchetphp/Ratchet/issues/799
    Merci de m’indiquer si vous obtenez des résultats probants.

Déjà qu on galere a faire comprendre a certains utilisateurs comment configurer simplement le websocket … alors si en plus on offre la possibilité de passer en wss mais avec la contrainte de devoir récupérer en conf le chemin vers les fichiers certificats (j entends deja des "les quoi ??? "…) je pense qu on est pas rendu …!

2 « J'aime »

Je comprends bien votre point de vue.
Après, quand on gère des ouvrants (portail, volets…), il s’agit de sûreté et on a peut-être pas envie que tout soit transmis en clair (même si risque quasi nul).

je suis pas certain que ca soit bon …?

d’ailleurs ce que tu essaies de faire ne me semble pas etre du wss mais simplement un passage de httpS (puisqu’écoute sur le port 443 !?) vers du websocket !?


à toute fin utile, perso je passe par mon synology qui fait du reverse proxy « tout seul ». en allant fouiller les fichiers de conf voilà ce qui est généré automatiquement
Note : c’est pour du nginx, pas du apache. Et c’est peut etre propre à syno (mais j’en doute!)

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name jeedom-connect.monJeedom.fr;

    ssl_certificate /path/to/file/fullchain.pem;
    ssl_certificate_key /path/to/file/privkey.pem;

    location / {
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 60;
        proxy_intercept_errors off;
        proxy_http_version 1.1;
        proxy_set_header        Upgrade            	$http_upgrade;
        proxy_set_header        Connection         	$connection_upgrade;
        proxy_set_header        Host            	$http_host;
        proxy_set_header        X-Real-IP           $remote_addr;
        proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto   $scheme;
        proxy_pass 				http://192.168.X.XX:8090;
    }

    error_page 403 404 500 502 503 504 @error_page;

    location @error_page {
        root /usr/syno/share/nginx;
        rewrite (.*) /error.html break;
        allow all;
    }
}

je ne pourrai pas faire plus, ni ne creuserai plus, sorry !

mouai alors je ne vais pas rentrer dans un débat ici …
mais une solution simple pour pas être « en clair » → passe en https, sans websocket, si tu ne sais pas faire mieux niveaux conf !

2 « J'aime »

Objectivement, websocket a une réelle fluidité dans l’application que je n’ai pas constaté avec http(s).
Ça me prendra du temps, mais je vais essayer.
C’est d’autant plus dommage qu’on a déjà les certificats et un serveur apache.

Ce n est clairement pas pour rien si l option est proposée, et « vendue » comme telle dans la documentation du plugin !

Apres tu peux aussi activer le polling en http(s) pour avoir de meilleur resultat.

J ai donné de serieuses pistes je pense.
Plus qu a tester, mais faudra mettre un peu les mains dans le cambouie (et comprendre ce qui est fait/à faire) !..

Voici ma config, située sur une autre machine que jeedom

<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ProxyRequests Off
    ProxyPreserveHost On

    ServerName mondomaine.ovh
	
    ProxyPass /ws/  ws://192.168.0.30:8090/
    ProxyPass / http://192.168.0.30/
    ProxyPassReverse / http://192.168.0.30/
    

    SSLCertificateFile /etc/letsencrypt/live/mondomaine.ovh/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mondomaine.ovh/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
  </VirtualHost>
</IfModule>

L’adresse locale est celle où se situe jeedom.
De mémoire il y a aussi un module Apache à installer

1 « J'aime »

Bonjour,

J’y vais aussi de ma petite conf pour la partie wss :wink:
Sur mon reverse proxy qui se trouve en amont de Jeedom :

<VirtualHost *:8090>
    ServerName chezmoi.cest.ici

    SSLEngine On
    SSLCertificateFile    /etc/letsencrypt/live/chezmoi.cest.ici/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/chezmoi.cest.ici/privkey.pem

    ProxyRequests     Off
    ProxyPreserveHost Off
    ProxyPass         / ws://10.8.0.2:8090/ keepalive=On retry=5
    ProxyPassReverse  / ws://10.8.0.2:8090
    ErrorLog  /var/log/apache2/chezmoi.cest.ici_error.log
    CustomLog /var/log/apache2/chezmoi.cest.ici_access.log combined
    <IfModule mod_security2.c>
      SecRuleEngine On
    </IfModule>
</VirtualHost>

Bonjour,

juste pour info, chez moi ca a fonctionné (sur la même machine que Jeedom), après avoir installé les bons modules apache de reverse proxy

1 « J'aime »