Javascript 如何在Node.js中创建TLS隧道
我正在尝试将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
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攻击