操作系统:Windows 7
NodeJS版本:0.10.2
WS模块:ws,最新版本
错误:
events.js:72
throw er; // Unhandled 'error' event
^
Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE
at SecurePair. (tls.js:1283:32)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:896:10)
at CleartextStream.read [as _read] (tls.js:430:15)
at CleartextStream.Readable.read (_stream_readable.js:294:10)
at EncryptedStream.write [as _write] (tls.js:344:25)
at doWrite (_stream_writable.js:211:10)
at writeOrBuffer (_stream_writable.js:201:5)
at EncryptedStream.Writable.write (_stream_writable.js:172:11)
at write (_stream_readable.js:547:24)
服务器:
(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 );
});
});
}());
委托单位:
var WebSocket = require('ws');
var ws = new WebSocket('wss://localhost:8080');
ws.on('open', function() {
ws.send('something');
});
证书确认了。
救命啊!
7条答案
按热度按时间6vl6ewon1#
我正在使用一个名为“superagent”的软件包,也得到了同样的错误。在尝试了几个可能的修复后,我遇到了这个对我来说100%有效的错误:
没有必要做任何要求或任何事情:只要在网络调用之前将其添加到您的代码中,您就可以开始了。
eimct9ow2#
示例中服务器使用的SSL证书可能不完全受WebSocket客户端信任,因此NodeJS在客户端的网络库中抛出错误。
您需要将
rejectUnauthorized
设置为false
(这是大多数高级网络库允许您通过传递到较低级别NodeJS网络库的选项来设置的选项)。我浏览了一下ws模块源代码,看起来你应该试试这个:
注意:
rejectUnauthorized
只应在测试/开发期间为false
。生产应用程序应始终使用rejectUnauthorized: true
以获得完全的安全性。qvk1mo1f3#
如果您不想禁用安全性,请添加ca:http /socket客户端选项中的[cert]选项。其中cert是要连接的服务器的证书或要连接的服务器的CA。
gorkyyrv4#
我以前遇到过类似的问题,你可以尝试使用
https.globalAgent.options.secureProtocol = 'SSLv3_method'
来设置HTTPS的SSLv3连接。rhfm7lfc5#
根据nginx官方网站,他们明确提到证书应该是服务器证书和链接证书的组合。
qxsslcnc6#
下面的解决方案是完美的,并为我在节点js工作罚款
0lvr5msh7#
使用库从给定文件夹加载证书(pem、crt ...)。
https://github.com/fujifish/syswide-cas
您可以从浏览器导出证书并尝试: