Websockets SSL (WSS) Support für deepstream.io messaging server durch haproxy
Den halben Tag habe ich damit verbracht, eine SSL Websockets Konfiguration für den deepstream.io messaging Server hinzubekommen.
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
(@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 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!