Quiero para el uso seguro de Websockets para mejorar la tasa de éxito.
No necesito el cifrado.

Am supongo que para ver una advertencia cuando el uso seguro de Websockets (wss://ejemplo.com) con un certificado auto-firmado?
He probado con Chrome 10 y no veo una advertencia y no me pidas que acepte el certificado. Simplemente funciona.

Es esto un error en chrome o el comportamiento esperado?
Voy a ser capaz de utilizar certificados autofirmados en el futuro?

Gracias

InformationsquelleAutor pablo | 2011-03-15

4 Comentarios

  1. 20

    Sí, ese es el comportamiento actual de Chrome, pero yo no esperaría a seguir la política en el futuro. En firefox 4 (si se habilita WebSockets en about:config) recibirá una advertencia sobre el certificado. Para aprobar el certificado también puede que tenga que entrar en el WebSockets URL en el navegador (sustituto de wss con https) y que se apruebe primero (ya que la advertencia de la WebSockets conexión sobre el certificado autofirmado no le puede dar la oportunidad de aprobarlo).

    Yo esperaría que todos los navegadores a converger en el comportamiento correcto que es lanzar un cuadro de diálogo de advertencia que permite el certificado autofirmado para ser aprobado.

    • ¿Sabes si el próximo Websockets proyecto de mejora de la tasa de éxito de la no-seguro Websockets?
    • Probablemente no. Los principales cambios a la estructura de los datos (longitud de la base en lugar de delimitador de base) y los datos del cliente al servidor no es enmascarado para abordar el mal comportamiento intermediario problema. El puerto 80 y 443 siguen el estándar de WebSockets puertos y el apretón de manos es todavía HTTP-como. ¿Cuál es el problema que está viendo causando WebSockets no conectarse para usted?
    • Me estoy refiriendo a ietf.org/mail-archive/web/hybi/current/msg01605.html. Se dice que el puerto 80 tiene sólo el 63% de tasa de éxito, mientras que el puerto 443 95% de tasa de éxito. También estoy obligado a utilizar el puerto 443 o 8080 porque estoy usando el nginx como proxy y no es compatible con HTTP 1.1. El puerto 443 requiere un certificado en el que complica las cosas y tal vez un poco por encima. No estoy seguro de cuántos usuarios tienen el puerto 8080 bloqueado.
    • Los índices de éxito no se aplican a las conexiones locales, que son para atravesar la Internet y de ubicaciones arbitrarias y que no está midiendo temperamental problemas (tampoco funciona o no). El puerto 80 problemas son porque no pueden ser de muchos intermediarios que interfieren con lo que se percibe como normal el tráfico HTTP. Usted no va a obtener mayor éxito en su red local con el uso de sas a través del puerto 443. Muy pocos son los usuarios que han saliente 8080 bloqueado ya que no es raro que para ejecutar normal de los servicios web en 8xxx puertos en el Internet.
    • Además, la mayoría de el puerto 80 temas van a estar en el lado del servidor, no del cliente. Si usted tiene un servidor donde se está ejecutando una WebSockets conexión en el puerto 80 y que son capaces de conectarse a sí mismo, entonces la tasa de éxito para todos los demás será mayor también. Algunos corporativa proxies transparentes podría plantear problemas en el lado del cliente, pero muy pocos usuarios en el hogar se vea ningún lado del cliente problema con el puerto 80.
    • Así que voy a utilizar el puerto 8080 y configuración de SSL en el puerto 443 si voy a tener ninguna opción. Gracias

  2. 15

    Los certificados auto-firmados son rechazados por Chrome desde v19 (http://crbug.com/53836). Si intenta conectarse a una wss URL que utiliza un certificado auto-firmado, la solicitud se silenciosamente abortado.

    Para permitir que los certificados auto-firmados para ser utilizado, de inicio de Chrome con el --ignore-certificate-errors bandera, e,g:

    chromium --user-data-dir=/tmp/whatever --ignore-certificate-errors
    

    A mi conocimiento, no hay manera de conseguir Firefox para aceptar el certificado autofirmado para wss. Así, sólo tiene que utilizar ws:// para las pruebas en Firefox. Si estás probando una aplicación web a través de https, entonces usted tiene que alternar una preferencia para permitir conexiones a (inseguro) ws:// Url:

    1. Visita about:config
    2. Conjunto network.websocket.allowInsecureFromHTTPS a true
    • Un truco que puede utilizar para tener acceso a una dirección URL HTTPS en la misma dirección/puerto como su websocket extremo con el certificado autofirmado y cuando se tira de una caja puede añadir una excepción de seguridad. Esta excepción se continuará trabajando para WebSocket conexiones. Muchos WebSocket implementaciones también puede servir una página HTTPS. De otra manera permanente una rápida servidor HTTPS a través de apache o openssl s_server sólo para agregar la excepción de seguridad también funciona. Esto funciona en todos los principales navegadores, incluyendo FireFox.
    • Usted salvó mi día … gracias!
  3. 12

    Yo tengo trabajo siguiendo este:

    https://github.com/einaros/ws/blob/master/test/WebSocketServer.test.js#L514

    Primera generar su auto-firmado certs:

    openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
    

    A continuación, crear su httpsServer de expresa aplicación a través del nodo integrado en el servidor https:

    var privateKey  = fs.readFileSync('sslcert/key.pem', 'utf8');
    var certificate = fs.readFileSync('sslcert/cert.pem', 'utf8');
    
    var credentials = {key: privateKey, cert: certificate};
    var express = require('express');
    var app = express();
    
    //... bunch of other express stuff here ...
    
    //pass in your express app and credentials to create an https server
    var httpsServer = https.createServer(credentials, app);
    httpsServer.listen(8443);
    

    A continuación, la configuración de su servidor websocket (irónicamente, esto va a utilizar el mismo puerto que el servidor http, yo no sabía de esto, pero supongo que los protocolos pueden compartir los puertos? – esto me tenía que ir por un rato).

    var WebSocketServer = require('ws').Server;
    var wss = new WebSocketServer({
        server: httpsServer
      });
    
    wss.on('connection', function connection(ws) {
      ws.on('message', function incoming(message) {
        console.log('received: %s', message);
      });
    
      ws.send('something');
    });
    

    Ahora vaya a https://0.0.0.0:8443 servidor y aceptar el certificado autofirmado en Chrome. A continuación, websockets ahora debería funcionar isnide el navegador.

    Abrir un chrome devtools consola y escribe:

    var ws = new WebSocket('wss://0.0.0.0:8443');
    ws.send('foo');
    

    ….o lo que sea host:puerto utilizado para httpsServer, la clave aquí es que usted está utilizando wss:// protocolo

    De su nodo express servidor web que usted debe ver un mensaje conectado a la consola. Iniciar el servidor con la node ./server.js

    http://www.chovy.com/web-development/self-signed-certs-with-secure-websockets-in-node-js/

    • Esto funciona, me faltaba esta parte «Ahora vaya a 0.0.0.0:8443 servidor y aceptar el certificado autofirmado en Chrome.»
    • Esto funcionó para mí. Gracias!
    • Con toda honestidad, no creo que los usuarios pasará a través de la dificultad para aceptar los certificados, cuando su contenido no aparece. La aceptación de los certificados es demasiado técnico para la mayoría de los usuarios.
  4. 0

    Cuando se utiliza wscat, entonces usted puede utilizar el ajuste-n(-n, –no-check: no comprobar para no autorizado de certificados)

    wscat -c "wss://30.90.212.255:8000" -n
    

Dejar respuesta

Please enter your comment!
Please enter your name here