HA Proxy et Websockets

Je configure mon premier server proxy inversé HAProxy. Il s'agira d'un proxy pour une application HTML5 fonctionnant sur Tomcat à partir d'un server différent. J'ai pu l'apather via proxy via HTTP, redirect toutes les requests vers HTTPS et mettre en œuvre HSTS. Cependant, après cela, je me suis rendue count qu'il essayait également de charger une connection Web. Le problème est que la connection de la connection Web qu'il charge est instable (ws: //) et non sécurisée (wss: //). Bien sûr, Chrome (et vraisemblablement plusieurs browsers) se plaignent de charger un script non sécurisé sur une connection sécurisée. Voici l'erreur que je reçois:

Connecting via WebSocket using url ws://website.domain.com:9091/webclient/ Mixed Content: The page at 'https://website.domain.com/webclient/' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://website.domain.com:9091/webclient/'. This request has been blocked; this endpoint must be available over WSS. Caught WebSocket error: SecurityError: Failed to construct 'WebSocket': An insecure WebSocket connection may not be initiated from a page loaded over HTTPS. 

Tous ces éléments ont été chargés par /webclient/script/ajaxclient.js:210

Comme il s'agit d'une application tierce, je ne sais pas si je peux les faire changer leur application. Par conséquent, je me demandais s'il y a quelque chose que je peux faire sur le server HAProxy pour forcer une connection Web sécurisée. Des pensées?

Voici mon file HAProxy conf pour la reference:

 global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 1000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats # Default SSL cert locations ca-base /etc/haproxy/ssl_2015 crt-base /etc/haproxy/ssl_2015 # Default ssl ciphers ssl-default-bind-ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4 # max size of temp DHE keys that are generated tune.ssl.default-dh-param 4096 defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch option http-server-close resortinges 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s timeout tunnel 4hrs # long timeout for Websocket connections maxconn 3000 #--------------------------------------------------------------------- # http frontend #--------------------------------------------------------------------- frontend http_https_frontend bind 192.168.2.201:80 redirect scheme https if !{ ssl_fc } bind 192.168.2.201:443 ssl crt /etc/haproxy/ssl_2015/ssl_crt.pem acl secure dst_port eq 443 rspadd Ssortingct-Transport-Security:\ max-age=16000000;\ includeSubDomains;\ preload; rsprep ^Set-Cookie:\ (.*) Set-Cookie:\ \1;\ Secure if secure # # routing based on websocket protocol header # acl is_websocket hdr(Upgrade) -i WebSocket acl is_websocket hdr_beg(Host) -i ws use_backend ws_backend if is_websocket # # 16000000 seconds: a bit more than 6 months # http-response set-header Ssortingct-Transport-Security max-age=16000000;\ includeSubDomains;\ preload; default_backend https_backend #--------------------------------------------------------------------- # http backend #--------------------------------------------------------------------- backend https_backend reqadd X-Forwarded-Proto:\ https server websvr1_http 192.168.1.125:8080 #--------------------------------------------------------------------- # ws backend #--------------------------------------------------------------------- backend ws_backend server websvr1_ws 192.168.1.125:9091 

Le server HAProxy est un server CentOS 7.1.1503 exécutant HAProxy 1.5.4.

Merci d'avance!

One Solution collect form web for “HA Proxy et Websockets”

Comme il s'agit d'une application tierce, je ne sais pas si je peux les faire changer leur application. Par conséquent, je me demandais s'il y a quelque chose que je peux faire sur le server HAProxy pour forcer une connection Web sécurisée.

Cela dépend principalement de la request de tiers. Si l'application utilise spécifiquement le protocole ws: il n'y a rien que vous pouvez faire sur le côté HAPROxy – les browsers ne se connecteront même pas à l'instance HAProxy, de sorte que vous n'as jamais eu la chance de faire quelque chose à ce sujet.

Vous devriez ouvrir un problème avec les développeurs d'applications tiers et les faire configurer le protocole de socket Web, ou append une détection (si la page est chargée sur HTTPS, puis utiliser WSS).

Alternativement, vous pouvez introduire la réécriture de contenu, où vous avez quelque chose qui modifie le contenu sortant pour réécrire ws: / to wss: //. HAProxy ne peut pas le faire, mais Nginx avec le module sub_filter peut.

  • WSS 3, deux sites sur un IIS 6 et Srs
  • Besoin de conseils sur SBS 2008: Premium ou Standard? WSS et / ou MOSS?
  • Copier de l'explorateur SPS2003 vers le dossier local: "Modifier les éléments" requirejs?
  • L'email d'alerte de Sharepoint a été bloqué par Sophos 10.0 - sont-ils partis pour toujours?
  • Sharepoint 3.0 (WSS), l'authentification IIS 6 à partir de domaine étranger
  • Risques liés à la configuration de l'authentification Kerberos pour WSS Reporting Services
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.