15

システム: Windows 7

NodeJS バージョン: 0.10.2

WS モジュール: ws、最終バージョン

エラー:

events.js:72
        スローアー; // 未処理の「エラー」イベント
              ^
エラー: UNABLE_TO_VERIFY_LEAF_SIGNATURE
    セキュアペアで。(tls.js:1283:32)
    SecurePair.EventEmitter.emit (events.js:92:17) で
    SecurePair.maybeInitFinished で (tls.js:896:10)
    CleartextStream.read で [_read として] (tls.js:430:15)
    CleartextStream.Readable.read (_stream_readable.js:294:10) で
    EncryptedStream.write で [_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) で
    書き込み時 (_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');
});

証明書が確認されました。

助けて>お願いします!

4

5 に答える 5

11

あなたの例でサーバーが使用する SSL 証明書は、おそらく WebSocket クライアントによって完全に信頼されていないため、NodeJS はクライアント側のネットワーク ライブラリでエラーをスローしています。

rejectUnauthorizedに設定する必要がありfalseます (これは、ほとんどの上位レベルのネットワーク ライブラリで、下位レベルの NodeJS ネットワーク ライブラリに渡されるオプションを介して設定できるオプションです)。

wsモジュールのソースコードをざっと読んだところ、これを試す必要があるようです:

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

注:テスト/開発中にrejectUnauthorizedのみ使用してください。false本番アプリケーションではrejectUnauthorized: true、完全なセキュリティのために常に を使用する必要があります。

于 2013-11-05T22:50:48.503 に答える
0

以前にも同様の問題が発生しました https.globalAgent.options.secureProtocol = 'SSLv3_method' 。https に SSLv3 接続を設定するために使用することができます。

于 2013-08-27T13:37:40.227 に答える