2012-03-16 12 views
88

¿Es posible tener WebSockets con https? Cuando se cambia a https, mi WebSocket devuelve un error de seguridad y funciona perfectamente con HTTP normal ...html5 Websocket con SSL

socket = new WebSocket("ws://my_www:1235"); 

Gracias

+0

mi mal, me di cuenta de que el servidor de socket AIR que estoy usando no es seguro, tengo que volver a escribir para usar flash.net.SecureSocket ... – Eric

Respuesta

131

La conexión WebSocket comienza su vida útil con un protocolo de enlace HTTP o HTTPS. Cuando se accede a la página a través de HTTP, puede usar WS o WSS (WebSocket secure: WS sobre TLS). Sin embargo, cuando su página se carga a través de HTTPS, solo puede usar WSS: los navegadores no permiten "degradar" la seguridad.

+0

eso es lo que tengo, pero me di cuenta de que el servidor de socket AIR que estoy usando no es seguro, tengo que volver a escribir para usar flash.net.SecureSocket ... – Eric

+0

Flash también tiene serios problemas ... ¿Está construyendo un servidor WebSocket (si es así, por qué), o está construyendo una aplicación? –

+0

Tengo un servidor de socket AIR que funciona sí. – Eric

19

No puede utilizar WebSockets a través de HTTPS, pero se puede utilizar WebSockets sobre TLS (HTTPS es HTTP sobre TLS). Simplemente use "wss: //" en el URI.

Creo que la versión reciente de Firefox no le permitirá usar WebSockets que no sean de TLS desde una página HTTPS, pero lo contrario no debería ser un problema.

+0

Entonces, ¿cuál es la solución? Tengo un servidor WS corriendo por http ahora compré un SSL y el navegador no más me permite conectarme con WS. Cambié WS a WSS: // y ahora no se está conectando con WebSocket – muaaz

+0

@muaaz, su servidor WebSocket debería ejecutarse en modo WSS y preferiblemente cargado con las mismas claves/certificaciones SSL que su servidor web que está sirviendo a sus páginas web de origen que están intentando para conectarse al servidor websocket. – kanaka

+2

Gracias. Por cierto, acabo de resolverlo mediante Proxying (usando apache) la solicitud de 'wss: //' a 'ws: //'. Por lo tanto, uso 'wss: // ws.domain.com' y apache aplique el proxy en él y redirija la solicitud donde se está ejecutando el servidor WS. e.g: 'ws: //10.12.23.45: 5641/server.php'. y sé que es una solución muy mala, aunque funciona para mí. Agradecería su ayuda si me guía a través de la configuración de Apache. por ejemplo: dónde poner el '.cert' etc. ¡gracias! – muaaz

17

1 advertencia adicional (además de la respuesta de kanaka/peter): si utiliza WSS, y el certificado del servidor no es aceptable para el navegador, no puede obtener ningún cuadro de diálogo representado (como ocurre con las páginas web) Esto se debe a que WebSockets se trata como un llamado "sub-recurso", y los diálogos de aceptación/excepción de seguridad/lo que sea no se representan para subrecursos.

+0

¿Incluso si es el mismo certificado que el usado para HTTPS? – vekah

+1

¿Qué quiere decir con "diálogo procesado por el navegador"? Me gusta 'alert()'? –

+1

Cuadros de diálogo que se originan originalmente en el navegador (no en una página). Al igual que "este certificado no es válido, ¿quieres continuar?" – oberstet