web-dev-qa-db-fra.com

Erreur Node.js avec SSL UNABLE_TO_VERIFY_LEAF_SIGNATURE

Système: Windows 7

Version de NodeJS: 0.10.2

Module WS: ws, dernière version

Erreur:

 events.js: 72 
 throw er; // Événement 'erreur' non géré 
 ^ 
 Erreur: UNABLE_TO_VERIFY_LEAF_SIGNATURE 
 À SecurePair. (tls.js: 1283: 32) 
 sur SecurePair.EventEmitter.emit (events.js: 92: 17) 
 sur SecurePair.maybeInitFinished (tls.js: 896: 10) 
 à CleartextStream.read [as _read] (tls.js: 430: 15) 
 à CleartextStream.Readable.read (_stream_readable.js: 294: 10) 
 à EncryptedStream.write [as _write] (tls.js: 344: 25) 
 à doWrite (_stream_writable.js: 211: 10) 
 à writeOrBuffer (_stream_writable.js: 201: 5) 
 à EncryptedStream .Writable.write (_stream_writable.js: 172: 11) 
 À l’écriture (_stream_readable.js: 547: 24) 

Serveur:

(function(){

    "use strict";

    var fs = require('fs');

    // you'll probably load configuration from config
    var cfg = {
        ssl: true,
        port: 8080,
        ssl_key: 'crt/server1.key',
        ssl_cert: 'crt/server1.crt'
    };

    var httpServ = require('https') 

    var WebSocketServer   = require('ws').Server;

    var app      = null;

    // dummy request processing
    var processRequest = function( req, res ) {

        res.writeHead(200);
        res.end("All glory to WebSockets!\n");
    };

    if ( cfg.ssl ) {

        app = httpServ.createServer({

            // providing server with  SSL key/cert
            key: fs.readFileSync( cfg.ssl_key ),
            cert: fs.readFileSync( cfg.ssl_cert ),
            //requestCert: true,
            //rejectUnauthorized: false

        }, processRequest ).listen( cfg.port );

    } else {

        app = httpServ.createServer( processRequest ).listen( cfg.port );
    }

    // passing or reference to web server so WS would knew port and SSL capabilities
    var wss = new WebSocketServer( { server: app } );


    wss.on( 'connection', function ( wsConnect ) {

        wsConnect.on( 'message', function ( message ) {

            console.log( message );

        });

    });


}());

Client:

var WebSocket = require('ws');
var ws = new WebSocket('wss://localhost:8080');
ws.on('open', function() {
    ws.send('something');
});

Le certificat confirmé.

Aide> s'il vous plaît!

12
Yaroslav L.

J'utilise un paquet appelé "superagent" et j'obtiens la même erreur. Après avoir essayé plusieurs solutions potentielles, je suis tombé sur celle qui fonctionnait pour moi 100% du temps:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

Il n'y a pas besoin de faire quoi que ce soit ou quoi que ce soit: ajoutez simplement ceci à votre code avant que vos appels au réseau et vous êtes prêt à partir.

19
dpjanes

Le certificat SSL utilisé par le serveur dans votre exemple n'est probablement pas totalement approuvé par le client WebSocket. NodeJS génère donc une erreur dans sa bibliothèque réseau côté client.

Vous devez définir rejectUnauthorized sur false (option que la plupart des bibliothèques de réseau de haut niveau vous permettront de définir via une option transmise à la bibliothèque de réseau NodeJS de niveau inférieur).

J'ai parcouru le code source du module ws et il semble que vous devriez essayer ceci:

var ws = new WebSocket('wss://localhost:8080', null, {rejectUnauthorized: false});

REMARQUE: rejectUnauthorized ne devrait être que false lors des tests/du développement. Les applications de production doivent toujours utiliser rejectUnauthorized: true pour une sécurité totale.

8
philidem

Si vous ne voulez pas désactiver votre sécurité. Ajoutez l'option ca: [cert] dans les options du client http/socket. Où cert est Certificat du serveur auquel vous vous connectez ou de l'autorité de certification du serveur auquel vous vous connectez.

2
Shrey

J'ai déjà rencontré un problème similaire auparavant, vous pouvez essayer d'utiliser https.globalAgent.options.secureProtocol = 'SSLv3_method' Pour définir la connexion SSLv3 pour https.

0
Rix

Selon le site Web officiel de nginx , ils mentionnent clairement le certificat doit être la combinaison du certificat de serveur et des certificats chaînés. MoreInfo

 enter image description here

0
Sharathi RB