websockets protocol nodejs websocket java-websocket

websocket - protocol - ¿Diferencia entre ws y wss?



websocket protocol (1)

¿Cuál es el procedimiento para cambiar ws en wss?

¿Si wss es una actualización a través de HTTP normal o wss funciona solo con HTTPS?

webSocket = new WebSocket("ws://localhost:port/Esv/ocp");

Funciona bien, cuando cambié ws a wss

webSocket = new WebSocket("wss://localhost:port/Esv/ocp");

muestra este error:

Error en el establecimiento de la conexión: net :: ERR_SSL_PROTOCOL_ERROR


Version corta

Para SSL o no SSL

Es posible que tenga un problema con el certificado SSL . La regla del punto de conexión se puede resumir como :

  • wss conecta https only en https only
  • ws conecta en http

y viceversa:

  • https acepta wss only
  • http acepta ws only

Los errores

Las siguientes situaciones lo llevarán a un error (pruebas realizadas en Firefox):

  • Si desea conectar una conexión wss a un punto final de http . En mis pruebas, tuve un

    InvalidStateError: se intentó utilizar un objeto que no es, o ya no es, utilizable

  • Si desea conectar una conexión ws a un punto final https , tendrá el error

    SecurityError: La operación es insegura.

Respuesta formal

La biblia de websocket es RFC 6455 . En la sección 4.1.5 :

Si / secure / es verdadero, el cliente DEBE realizar un protocolo de enlace TLS sobre la conexión después de abrir la conexión y antes de enviar los datos del protocolo de enlace [RFC2818]. Si esto falla (por ejemplo, el certificado del servidor no pudo ser verificado), entonces el cliente DEBE fallar la conexión de WebSocket y abortar la conexión. De lo contrario, todas las comunicaciones posteriores en este canal DEBEN correr a través del túnel encriptado [RFC5246].

El indicador de seguridad está definido por el URI. La sección 3 define lo que es seguro

El URI se llama "seguro" (y se dice que "el indicador de seguridad está establecido") si el componente del esquema coincide con "wss" sin distinción de mayúsculas y minúsculas.

TL; DR

Si quieres usar wss :

  • debe tener SSL activado
  • su punto final debe estar protegido ( https://... ): la "degradación de seguridad" no está permitida

Si quieres usar ws :

  • Asegúrese de que su punto final no tenga SSL habilitado ( http://... )