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

in #deutsch5 years ago

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

Sort:  

(@alucian) Vielleicht motiviert dich das Vote ein bisschen, so cool an den Technicals weiter zu forschen und zu arbeiten. :-) Lieben Grüße

Du hast ein kleines Upvote von unserem Curation – Support – Reblog Account erhalten. Dieser wurde per Hand erteilt und nicht von einem Bot.

Wir, die Mitglieder des German Steem Bootcamps möchten die Deutsche Community stärken.

Du findest uns im Discord unter https://discord.gg/Uee9wDB

Guten Tag,

Mein Name ist GermanBot und du hast von mir ein Upvote erhalten. Als UpvoteBot möchte ich dich und dein sehr schönen Beitrag unterstützen. Jeden Tag erscheint ein Voting Report um 19 Uhr, in dem dein Beitrag mit aufgelistet wird. In dem Voting Report kannst du auch vieles von mir erfahren, auch werden meine Unterstützer mit erwähnt. Schau mal bei mir vorbei, hier die Votings Reports. Mach weiter so, denn ich schaue öfter bei dir vorbei.

Euer GermanBot

Congratulations @schlafhacking! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 800 comments. Your next target is to reach 900 comments.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Vote for @Steemitboard as a witness to get one more award and increased upvotes!