Erreur Node.js avec SSL UNABLE_TO_VERIFY_LEAF_SIGNATURE
Système: Windows 7
NodeJS version: 0.10.2
WS module: ws, la dernière version
Erreur:
événements.js:72 jeter er; //non Gérée "erreur" de l'événement ^ Erreur: UNABLE_TO_VERIFY_LEAF_SIGNATURE au SecurePair. (tls.js:1283:32) au SecurePair.EventEmitter.émettre (événements.js:92:17) au SecurePair.maybeInitFinished (tls.js:896:10) au CleartextStream.lire [en savoir] (tls.js:430:15) au CleartextStream.Lisibles.lire (_stream_readable.js:294:10) au EncryptedStream.écrire [comme _write] (tls.js:344:25) au doWrite (_stream_writable.js:211:10) au writeOrBuffer (_stream_writable.js:201:5) au EncryptedStream.Accessible en écriture.écrire (_stream_writable.js:172:11) lors de 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é.
Aider> s'il vous plaît!
source d'informationauteur Yaroslav L. | 2013-08-27
Vous devez vous connecter pour publier un commentaire.
Je suis en utilisant un package appelé "superagent" et obtenir la même erreur. Après avoir essayé plusieurs méthodes de résolution possibles, je suis tombé sur ce qui fonctionne pour moi à 100% du temps:
Il n'y a pas besoin de faire tout exige ou que ce soit : il suffit de l'ajouter à votre code avant de votre réseau d'appels et vous êtes bon pour aller.
Le certificat SSL utilisé par le serveur dans votre exemple n'est probablement pas totalement approuvées par le client WebSocket donc NodeJS est de lancer une erreur dans son réseau de bibliothèques sur le côté client.
Vous devez définir
rejectUnauthorized
àfalse
(c'est une option que la plupart de haut niveau du réseau des bibliothèques vous permet de régler via une option qui est passée à l'étage inférieur NodeJS mise en réseau de la bibliothèque).J'ai parcouru le ws module de code source et semble que vous devriez essayer ceci:
REMARQUE:
rejectUnauthorized
ne doit êtrefalse
cours de test/développement. Les applications de Production doivent toujours utiliserrejectUnauthorized: true
pour la sécurité totale.Si vous ne souhaitez pas désactiver votre sécurité. Ajouter ca: [cert] dans http /socket options du client.
Où cert est le Certificat de serveur auquel vous vous connectez ou autorité de certification du serveur auquel vous vous connectez.
J'ai rencontré un problème similaire avant, vous pouvez essayer d'utiliser
https.globalAgent.options.secureProtocol = 'SSLv3_method'
pour définir SSLv3 connexion https.
Que par la nginx site officiel, ils ont clairement mentionné certificat doit être la combinaison du certificat du serveur et les chaînes de certificats.MoreInfo