nodejs写的sslproxy捕获ssl明文数据
发布于 3年前 作者 philsong 1460 次浏览
var net = require('net');

var sslproxyhost="192.168.7.19";//被代理的服务的IP
var sslproxyport=5004;//被代理的端口
var ssllistenport=5004;//代理端口

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

var options = {
  key: fs.readFileSync('ryans-key.pem'),
  cert: fs.readFileSync('ryans-cert.pem'),
};

var sslserver = tls.createServer(options, function(cleartextStream) {
    console.log('client connected',
              cleartextStream.authorized ? 'authorized' : 'unauthorized');
    console.log('client disconnected');
    //cleartextStream.setEncoding('ascii');
    cleartextStream.on('data', function(data) {
        console.log('client send:');
        console.log(data);  
        console.log('' + data);
    });
    cleartextStream.on('end', function() {
        console.log('client disconnected');
      //server.close();
    });
  
    var c_cleartextStream = tls.connect(sslproxyport,sslproxyhost, {}, function() {
      console.log('server connected',
                  c_cleartextStream.authorized ? 'authorized' : 'unauthorized');
    });

    //c_cleartextStream.setEncoding('ascii');
    c_cleartextStream.on('data', function(data) {
        console.log('server recv:');
        console.log(data);
        buf = new Buffer(data.length);
        for (var i = 0; i < data.length ; i++) {
         // buf[i] = data.charCodeAt(i);
          buf[i]=data[i]&0x7f;
        }
        console.log("server recv2(cut even):");
        console.log(buf);
        console.log('' + buf);
    });

    c_cleartextStream.on('end', function() {
        console.log('server disconnected');
        //sslserver.close();
    });

    cleartextStream.pipe(c_cleartextStream);
    c_cleartextStream.pipe(cleartextStream);
//
});

sslserver.listen(ssllistenport, function() {
  console.log('server bound');
});
1 回复

有一个问题就是tls.connect的返回stream怎么释放?不许要释放资源?

回到顶部