2016-04-04 8 views
0

node.jsサーバーが受信したトラフィックをTLS接続にトンネルしようとしています。私はそれを実行し、それをテストするとき、私は私の端末でこれを参照してください、Node.jsでTLSトンネルを作成する方法

function tunnel() { 
    var c = tls.connect(443, 'myhost', {rejectUnauthorized: false}); 

    var server = net.createServer(function (socket) { 
    socket.addListener("connect", function() { 
     console.log("Connection from " + socket.remoteAddress); 
     //sync the file descriptors, so that the socket data structures are the same 
     c.fd = socket.fd; 
     //pipe the incoming data from the client directly onto the server 
     c.pipe(socket); 
     //and the response from the server back to the client 
     socket.pipe(c); 
    }); 

    socket.addListener("data", function (data) { 
     console.log("Data received from client"); 
    }); 

    socket.addListener("close", function() { 
     server.close(); 
    }); 
    }); 

    server.listen(7000); 
} 

::私はData received from clientを参照して、サーバコンソールで

$ curl --insecure https://myhost:443 
hello world 

$ curl --insecure https://localhost:7000 
# nothing... just hangs 

、決してconnectコールバック私はこのようないくつかのコードを持っています。

私は適切なトラックにいますか?サーバーのconnectionイベントハンドラ(あなたがcreateServer()に渡すコールバック)に渡さ

答えて

0

ソケットは接続すでにあるので、(それがnet.connect()/tls.connect()で作成したクライアントソケット用です)connectイベントがあることはありません。ここで

は、プロキシは次のようになります。一つだけの接続受け入れること:

net.createServer(function(socket) { 
    server.close(); // Stop listening for additional connections 
    var upstream = tls.connect(443, 'myhost', {rejectUnauthorized: false}); 
    socket.pipe(upstream).pipe(socket); 
}).listen(7000); 

私もrejectUnauthorized: falseを使用して、セキュアではないことを指摘しなければならないが。アップストリームサーバーが自己署名入りの証明書を使用しているため、その証明書を使用している場合は、caオプションを自己署名入りのCAに設定する必要があります。これにより、CAによって署名された証明書が許可され、MITM攻撃が防止されます。

関連する問題