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
conectahttps only
enhttps only
-
ws
conecta enhttp
y viceversa:
-
https
aceptawss only
-
http
aceptaws 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 dehttp
. En mis pruebas, tuve unInvalidStateError: se intentó utilizar un objeto que no es, o ya no es, utilizable
- Si desea conectar una conexión
ws
a un punto finalhttps
, tendrá el errorSecurityError: 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://...
)