javascript security encryption websocket

javascript - Asegurar websockets



security encryption (3)

En este momento, nuestra aplicación está diseñada para facilitar todas las comunicaciones a través de websockets después de la carga inicial.

Estamos tratando de encontrar una solución para pasar con seguridad datos confidenciales a través de este transporte.

Hasta ahora estamos pensando en algunas cosas:

  1. Autenticación del transporte websocket devolviendo un hash único almacenado en una cookie de sesión entregada a través de SSL en la carga inicial.
  2. El cifrado del lado del cliente utiliza algo como una implementación de JavaScript bcrypt para cifrar todo antes de que se transporte.

  3. Simplemente pasar todos los datos confidenciales con una publicación normal a través de SSL, aunque no queremos hacerlo.

Algo como el número 1 sería el mejor resultado, pero no sabemos si los websokets son vulnerables a cosas como el hombre en los ataques medios incluso después de la autenticación.

¡Cualquier ayuda para subsanar posibles fallas de seguridad, o cualquier otra idea sobre cómo lograr una verdadera seguridad a través de websockets sería muy apreciada!


Asegurar (encriptar usando SSL / TLS) es muy importante para sus datos. Pero también debes considerar la autenticación. Cualquier persona con un dispositivo capaz de ws que conozca su punto final para su servidor podrá obtener datos si no requiere autenticación primero. Consulte http://simplyautomationized.blogspot.com/2015/09/5-ways-to-secure-websocket-rpi.html Incluye un método de intercambio de tres vías (CHAP) que requiere que tanto el cliente como el servidor tengan una secreto compartido".
Otras formas se detallan en el post.

Aclamaciones


Con respecto a las cookies, podría valer la pena considerar que (actualmente), la especificación del protocolo WebSockets no requiere que un navegador proporcione todas, o incluso cualquiera de las cookies que configuró el servidor web que originalmente servía el JavaScript que se usa para abrir una conexión WebSockets a ese servidor.

Vea here una descripción de cómo se comporta Firefox (de un desarrollador de FF).


La conexión a una URL wss:// WebSocket en lugar de a ws:// utilizará el cifrado TLS / SSL estándar del navegador para conectarse al servidor. Es equivalente a HTTPS vs HTTP. Si confía en la implementación SSL / TLS de su navegador, puede confiar en WebSocket wss:// connections ya que usan el mismo motor. Necesitará tener un certificado SSL firmado configurado con su servidor websocket, pero de todas formas eso es un requisito.