Node.js-在启动TLS之前发送非加密消息

Node.js-在启动TLS之前发送非加密消息,node.js,xml,ssl,Node.js,Xml,Ssl,各位,, 我有一个项目,想为安全系统创建一个XML接口。 安全系统是主机,我将在node.js中第一步开发客户端,稍后在node.js中开发客户端 过程描述: -要建立TLS连接,主机将接收未加密的STARTTLS命令 程序(建立连接) 启动TCP连接 TCP连接已建立 客户端到主机(STARTTLS) 主机已准备好接收TLS客户端 当我用“net”启动一个TCP连接并尝试将连接转发到“tls”时,源端口被更改,主机意味着tls部分是一个新的客户端。 e、 g: 连接“网络”=源TCP端口:2

各位,, 我有一个项目,想为安全系统创建一个XML接口。 安全系统是主机,我将在node.js中第一步开发客户端,稍后在node.js中开发客户端

过程描述: -要建立TLS连接,主机将接收未加密的STARTTLS命令

程序(建立连接)

  • 启动TCP连接
  • TCP连接已建立
  • 客户端到主机(STARTTLS)
  • 主机已准备好接收TLS客户端
  • 当我用“net”启动一个TCP连接并尝试将连接转发到“tls”时,源端口被更改,主机意味着tls部分是一个新的客户端。 e、 g:

    • 连接“网络”=源TCP端口:2483
    • 连接“tls”=源TCP端口:2484
    非常感谢

    var net = require('net');
    var tls = require('tls');
    var fs = require('fs');
    
    var port = 5555;
    var host = '192.168.2.126';
    var conn = net.createConnection(port ,host);
    
    
    var options = {
        pfx: fs.readFileSync('client.pfx')
    };
    
    
    conn.on('connect', function() {
          console.log('connected to server');
          conn.write('STARTTLS');
    
          connTLS()
         });
    
    
    function connTLS (){
        conn = tls.connect(port, host, options, function() {
            // Check if the authorization worked
            if (conn.authorized) {
                console.log("Connection authorized by a Certificate Authority.");
            } else {
                console.log("Connection not authorized: " + conn.authorizationError)
            }
    
            // Send a friendly message
            conn.write('OK it works');
    
        });
    }
    
    
    
    
    conn.on('data' , function (data){
            var result = "";
            for(var i = 0; i < data.length; ++i){
            result+= (String.fromCharCode(data[i]));
            }
            console.log("Data received from the server: " , result);
            });
    conn.on('error', function(err) {
          console.log('Error in connection:', err);
          });
    conn.on('close', function() {
           console.log('connection got closed, will try to reconnect');
             conn.end();
           });
    conn.on('end' , function(){
          console.log('Requested an end to the TCP connection');
           });
    
    
    var net=require('net');
    var tls=需要('tls');
    var fs=需要('fs');
    var端口=5555;
    var主机='192.168.2.126';
    var conn=net.createConnection(端口、主机);
    变量选项={
    pfx:fs.readFileSync('client.pfx')
    };
    conn.on('connect',function(){
    log('连接到服务器');
    conn.write(“STARTTLS”);
    康特尔斯()
    });
    函数connTLS(){
    conn=tls.connect(端口、主机、选项、函数(){
    //检查授权是否有效
    如果(康涅狄格州授权){
    log(“由证书颁发机构授权的连接”);
    }否则{
    console.log(“连接未授权:+conn.authorizationError”)
    }
    //发出友好的信息
    conn.write(‘正常工作’);
    });
    }
    连接on(数据),功能(数据){
    var结果=”;
    对于(变量i=0;i
    非常感谢您的帮助“将TCP升级到TLS”是我搜索的内容

    >>插座

    var client = new net.Socket();
    
    client.connect(PORT, HOST, function() {
        console.log('Connected');
        client.write(startTLS,function (){
            console.log("request sent")
        })
    

    你为什么要首先创造这样一个奇怪的设计?TLS升级的常用方法(如SMTP、IMAP、POP、FTPS等)不是使用其他源端口创建新的TCP连接,而是通过在已建立的TCP连接中执行TLS握手来将当前TCP连接升级到TLS。非常感谢您的帮助“将TCP升级到TLS”这就是我一直在寻找的,但现在我有另一个问题。
    var options = {
        socket: client,
        pfx: fs.readFileSync('./Export/client.pfx'),
        secureProtocol: "TLSv1_2_method",
        rejectUnauthorized: false
    
    }; 
    
    var tlsSocket = new tls.connect(options)