Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Node.js中创建TLS隧道_Javascript_Node.js - Fatal编程技术网

Javascript 如何在Node.js中创建TLS隧道

Javascript 如何在Node.js中创建TLS隧道,javascript,node.js,Javascript,Node.js,我正在尝试将node.js服务器接收到的流量通过隧道传输到TLS连接。我有一些这样的代码: function tunnel() { var c = tls.connect(443, 'myhost', {rejectUnauthorized: false}); var server = net.createServer(function (socket) { socket.addListener("connect", function () { console.lo

我正在尝试将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);
}
当我运行并测试它时,我在终端中看到:

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

$ curl --insecure https://localhost:7000
# nothing... just hangs
在服务器控制台中,我看到了从客户端接收到的
数据,但从未看到
连接
回调


我在正确的轨道上吗?

传递给服务器的
连接的套接字
事件处理程序(传递给
createServer()
的回调)已经连接,因此永远不会有
connect
事件(即使用
net.connect()
/
tls.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攻击