2014-09-08 11 views
10

Come posso connettermi su ssl a un web socket servito da GlassFish su un'istanza Amazon AWS EC2 tramite un ELB?WebSockets: wss dal client all'istanza Amazon AWS EC2 tramite ELB

Sto usando Tyrus 1.8.1 in GlassFish 4.1 b13 pre-release come implementazione websocket.

La porta 8080 non è protetta e la porta 8181 è protetta con ssl.

  • ELB nome DNS: elb.xyz.com
  • EC2 nome DNS: ec2.xyz.com percorso
  • websocket:/web/presa

Ho usato con successo entrambi i ws & wss per connettersi direttamente alla mia istanza EC2 (bypassando il mio ELB). cioè entrambe le seguenti URL funzionano:

  • WS: //ec2.xyz.com: 8080/web/presa
  • wss: //ec2.xyz.com: 8181/web/presa

Ho usato con successo ws (non-ssl) sul mio ELB utilizzando un listener tcp 80> tcp 8080. vale a dire il seguente URL funziona:

  • WS: //elb.xyz.com: 80/web/presa

ho, tuttavia, non sono riusciti a trovare un modo per utilizzare WSS se la mia ELB.

Ho provato molte cose.

Si considera che il modo più probabile di ottenere WSS a lavorare attraverso il mio ELB sarebbe quello di creare un ascoltatore tcp 8181> TCP 8181 sul mio ELB con protocollo proxy abilitato e utilizzare il seguente URL:

  • WSS : //elb.xyz.com: 8181/web/socket

Sfortunatamente, questo non funziona. Immagino che potrei dover abilitare il protocollo proxy su glassfish, ma non sono stato in grado di scoprire come farlo (o se è possibile, o se è necessario che wss funzioni sul mio ELB).

Un'altra opzione potrebbe essere in qualche modo avere ws o wss eseguire su una connessione ssl che è terminata sull'ELB, e farlo continuare senza protezione su glassfish, usando un listener ssl> tcp 8080. Ciò non ha funzionato nemmeno per me, ma forse alcune impostazioni non erano corrette.

Qualcuno ha qualche modifica alle mie due prove di cui sopra. O qualcuno ha qualche altro suggerimento?

Grazie.

risposta

5

Ho recentemente abilitato wss tra il mio browser e un'istanza Node.js EC2. C'erano 2 cose da considerare:

  • nella scheda ascoltatori ELB, aggiungere una riga per il porto WSS con SSL come protocollo di bilanciamento del carico.
  • nella scheda descrizione ELB, impostare un timeout di inattività più alto (impostazioni di connessione), che è di 60 secondi per impostazione predefinita. L'ELB stava uccidendo le connessioni websocket dopo 1 minuto, impostando il timeout di inattività su 3600 (il valore massimo) consente comunicazioni molto più lunghe.

Ovviamente non è la soluzione definitiva dal momento che il timeout è ancora lì, ma 1 ora è probabilmente sufficiente per quello che facciamo di solito.

speranza questo aiuto

8

ho avuto una configurazione simile e in origine configurato miei ascoltatori ELB come segue:

  • HTTP 80 HTTP 80
  • HTTPS 443 HTTPS 443

Anche se questo ha funzionato bene per il sito web stesso, la connessione websocket non è riuscita. Nel ascoltatore, è necessario per consentire a tutti di connessione TCP sicura al contrario di SSL solo per permettere WSS di passare attraverso così:

  • HTTP 80 HTTP 80
  • SSL (TCP sicuro) 443 SSL (TCP Sicuro) 443

Si consiglia inoltre di aumentare il timeout di inattività dell'ELB.

+0

Intendevo "al contrario di HTTPS solo" – guillaumepiot

+3

Grazie, TCP protetto invece di HTTPS ha fatto il trucco! –

+0

"SSL (Secure TCP) 443 TCP 80" funziona anche –