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:  

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!