socket error err_ssl_version_or_cipher_mismatch node.js ssl https socket.io ssl-certificate

node.js - err_ssl_version_or_cipher_mismatch - Error de HTTPS "longitud de datos demasiado larga" en s3_pkt.c de Socket.io



socket io polling (2)

Intente crear OpenSSL con SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER (crédito a Steven Henson y Jaaron Anderson de la lista de correo de OpenSSL).

Estamos intentando que Socket.io flashsockets funcione en Internet Explorer 9 a través de HTTPS / WSS. Las tomas de corriente funcionan a través de HTTP, pero HTTPS nos está dando problemas. Estamos utilizando socket.io versión 0.8.7 y socket.io-client versión 0.9.1-1.

Estamos ejecutando nuestro servidor websocket a través de SSL en el puerto 443. Hemos especificado la ubicación de nuestro archivo WebsocketMainInsecure.swf (estas son solicitudes ws entre dominios) en la ubicación correcta, y estamos cargando el archivo en el archivo swfobject insertado sobre HTTPS.

Abrimos el puerto 843 en nuestro grupo de seguridad para nuestra instancia EC2 y el archivo de política de origen cruzado se está procesando con éxito a través de HTTP. No parece renderizar a través de HTTPS (Chrome arroja un error de conexión SSL).

Hemos probado dos versiones del archivo WebsocketMainInsecure.swf. El primero es el archivo proporcionado por Socket.io, que se basa en WebsocketMainInsecure.as que no incluye la línea

Security.allowInsecureDomain("*");

Esto arroja el error SCRIPT16389: Unspecified error. en la línea WebSocket.__flash.setCallerUrl(location.href) .

Pensamos que era porque el archivo SWF no permitía las solicitudes HTTPS, por lo que reemplazamos el archivo WebSocketMainInsecure.swf con el que se encuentra en este repositorio: https://github.com/gimite/web-socket-js porque incluye el

Security.allowInsecureDomain("*");

línea en el código actionscript. Cuando usamos esto, vimos que la conexión de la toma de corriente se desconectaba y reconectaba en un bucle infinito. Rastreamos el error hasta el archivo transport.js en la biblioteca socket.io en la función onSocketError en el prototipo de Transporte. Lanza el error:

[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:]

Incluso intentamos actualizar tanto socket.io como socket.io-client a la versión 0.9.6 y todavía recibimos el error Access is denied .

Este error ha sido muy difícil de depurar, y ahora no sabemos cómo hacer funcionar las tomas de corriente. Nos preguntamos si podría tener que ver con el uso de una versión anterior de socket.io, o tal vez con que nuestro servidor de archivos de políticas no acepte solicitudes HTTPS, o tal vez con la forma en que el archivo WebSocketMainInsecure.swf de la web- socket-js github repo se construyó en relación con lo que socket.io-client espera.


No estoy seguro de que funcione. Pero aquí está mi idea / sugerencia:

  1. Idea: supongo que (posiblemente) intentó acceder a una URL que es demasiado larga. Esto sucede si los datos a menudo se transmiten a través de GET-Parameters. El límite oficial para una URL es inferior a 512 Bytes.

Detalles: la especificación HTTP dice que una línea de protocolo puede tener como máximo 512 Bytes. Si es más largo, el servidor puede rechazar la solicitud o no puede manejar la solicitud. La primera línea en HTTP con un GET-requet es como "GET / path / to? Param1 = data1 & param2 = data2 & ... HTTP / 1.1" que necesitaría caber en 512 bytes. Para solicitudes POST no existe tal limitación.

Sin embargo, su error parece ser el origen de alguna implementación de SSL (¿openSSL?): Refiriéndose a s3_pkt.c en la línea 503 (Encontré un archivo como este aquí: http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/ssl/s3_pkt.c ) pero parece ser diferente; No conozco los detalles, y solo estoy especulando: podría pensar que la implementación de openSSL tiene un soporte limitado para solicitudes GET largas (ya que no son compatibles con HTTP) y simplemente las rechaza de esta manera ...

Veo estas posibilidades ahora: 1. Solución: use POST en lugar de GET-Requests para transmitir conjuntos de datos más largos. Vea si esto funciona ... 2. Intente reemplazar su openssl-installation o libopenssl en el servidor utilizado; posiblemente esté roto u obsoleto? 3. Intente solicitar ayuda de los desarrolladores de openssl ...

Espero que ayude...