Websockets SSL (WSS) Support für deepstream.io messaging server durch haproxy

Words
271
Reading
2 min
Listen
Play
7y

Den halben Tag habe ich damit verbracht, eine SSL Websockets Konfiguration für den deepstream.io messaging Server hinzubekommen.

image.png

Das Produkt ist klasse, opensource und kann auf den ersten Blick alles, was ich für eine "Multiplayer" VR Kundenprojekt im Backend brauche. Eigentlich. Wenn nicht die wohl in den Jahren entstandene Doku verschwunden wäre. Viele Links im Netz zeigen auf 404 und viele Dokumente des Repositories zeigen ins Leere, z.B. dieser https://deepstream.io/docs/server/configuration/#ssl-configuration

Nun brauche ich aber zwingend SSL, weil im Jahr 2019 nichts mehr ohne geht. Da ich an der nativen SSL Konfiguration mangels vernünftiger Doku gescheitert bin, habe ich einfach haproxy ausgepackt, was für mich das Standard-Tool im Umgang mit SSL-Terminierung und TCP connections routing geworden ist. Und da man im Internet auch mit gründlich suchen keine fertigen haproxy deepstream config samples findet, poste ich hier eins. Vielleicht nützt es jemandem. Viel Spaß damit! :D

Ausgangslage: Deepstream ist unter meinhost:6020 plain erreichbar. Haproxy horcht auf meinhost:6023 und kontrolliert den deepstream Prozess mit einem health check. So bin ich vorbereitet, sollte ich später einen deepstream cluster einsetzen wollen.
Man kann mit Javascript dann ssl-gesichert auf den deepstream websocket connecten.
const client = deepstream('wss://meinhost:6023')

# haproxy.cfg
global
        daemon
        log     127.0.0.1       local1 info
        maxconn 20000
        ulimit-n        655360
        tune.ssl.default-dh-param 2048

defaults
        mode http
        maxconn 20000
        timeout connect 5000ms
        timeout client 1000000ms
        timeout server 1000000ms
        timeout check 10s
        option accept-invalid-http-request
        option logasap

frontend https-in
        mode http
        maxconn 20000
        option forwardfor
        bind meinhost:6023 ssl crt /opt/ssl-wss-all.pem no-sslv3 ciphers ECDHE+aRSA+AES256+GCM+SHA384:ECDHE+aRSA+AES128+GCM+SHA256:ECDHE+aRSA+AES256+SHA384:ECDHE+aRSA+AES128+SHA256:ECDHE+aRSA+AES256+SHA:ECDHE+aRSA+AES128+SHA:AES256+GCM+SHA384:AES128+GCM+SHA256:AES128+SHA256:AES256+SHA256:DHE+aRSA+AES128+SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS
        log global
        option httplog
        default_backend servers

backend servers
        mode http
        fullconn 50000
        balance source
        option log-health-checks
        option httpchk GET /health-check
        server server1 meinhost:6020 maxconn 1000 check port 8080 weight 8

Websockets SSL (WSS) Support für deepstream.io messaging server dur... | Ecency