7

node.jsとTLSを使用してサーバーへのクライアント接続を設定しようとしていますが、失敗します。

私の質問は、接続が失敗する理由に関する詳細情報を取得する方法です。理想的には、ハンドシェイクと証明書交換を示すopenssl(正常に接続)を使用する場合と同様のものです。

現時点で私が得るのは{[エラー:ソケットがハングアップする]コード:'ECONNRESET'}だけです。

私はインターネットブログに基づいた以下のコードのようなものを使用しています。

var tls = require('tls'),
 fs = require('fs');

// callback for when secure connection established
function connected(stream) {
    if (stream) {
      stream.write('Hello');
    } else {
      console.log("Connection failed");
    }
}

// needed to keep socket variable in scope
var dummy = this;

// try to connect to the server
dummy.socket = tls.connect(
{
    port: 8000,
    host: 'dest.server.com',
    ca: [
            fs.readFileSync('C:\\Tools\\Certificates\\TestRoot.pem', 'utf8')
        ],
    cert: fs.readFileSync('C:\\Tools\\Certificates\\source.server.com.cert.pem', 'utf8'),
    key:  fs.readFileSync('C:\\Tools\\Certificates\\source.server.com.key.pem', 'utf8'),
    passphrase: 'password',
}
, function() {
   // callback called only after successful socket connection
   dummy.connected = true;
   if (dummy.socket.authorized) {
      // authorization successful
      console.log('auth ok');
      dummy.socket.setEncoding('utf-8');
      connected(dummy.socket);
   } else {
      // authorization failed
      console.log('auth fail');
     console.log(dummy.socket.authorizationError);
     connected(null);
   }
});

dummy.socket.addListener('data', function(data) {
   // received data
   console.log(data);
});

dummy.socket.addListener('error', function(error) {
   if (!dummy.connected) {
     // socket was not connected, notify callback
     connected(null);
   }
   console.log("FAIL");
   console.log(error);
});

dummy.socket.addListener('close', function() {
 // do something
});
4

1 に答える 1

9

ソースを少し掘り下げた後、NODE_DEBUG環境変数に「tls」を含めるように設定することで、いくつかの追加情報を取得できるようです。私の場合はあまり役に立ちませんでしたが、他の人には役立つかもしれません。

于 2012-09-24T19:07:05.503 に答える