Yar*_* L. 14 javascript windows ssl openssl node.js
系统: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 );
});
});
}());
Run Code Online (Sandbox Code Playgroud)
客户:
var WebSocket = require('ws');
var ws = new WebSocket('wss://localhost:8080');
ws.on('open', function() {
ws.send('something');
});
Run Code Online (Sandbox Code Playgroud)
证书确认.
帮助>请!
dpj*_*nes 21
我正在使用一个名为"superagent"的包并得到同样的错误.在尝试了几个可能的修复之后,我遇到了一个对我来说100%有效的方法:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Run Code Online (Sandbox Code Playgroud)
没有必要做任何要求或者其他任何事情:只需在网络呼叫之前将其添加到您的代码中,您就可以了.
WebSocket客户端可能不完全信任您的示例中服务器使用的SSL证书,因此NodeJS在客户端的网络库中引发错误.
您需要设置rejectUnauthorized
为false
(这是大多数高级网络库允许您通过传递到较低级别NodeJS网络库的选项进行设置的选项).
我浏览了ws模块源代码,看起来你应该试试这个:
var ws = new WebSocket('wss://localhost:8080', null, {rejectUnauthorized: false});
Run Code Online (Sandbox Code Playgroud)
注意:rejectUnauthorized
应仅false
在测试/开发期间.生产应用程序应始终rejectUnauthorized: true
用于完全安全.
我以前遇到过类似的问题,你可以尝试使用
https.globalAgent.options.secureProtocol = 'SSLv3_method'
https设置SSLv3连接。
归档时间: |
|
查看次数: |
23267 次 |
最近记录: |