Nodejs 请教如何使用node.js创建socket SSL链接

Nodejs 请教如何使用node.js创建socket SSL链接

如题:

我之前的ios客户端里面的代码,是配置有 // Configure SSL/TLS settings NSMutableDictionary *settings = [NSMutableDictionary dictionary]; [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot]; [sock startTLS:settings];

设置了为yes,才可以连接到服务器。

我现在的js代码如下, 我测试过,自己使用node.js启动一个是可以用的,但是连接到生产的服务器就肯定不行。求教,谢谢了。

var net = require(‘net’); var fs = require(‘fs’); var client = new net.Socket();

var options = { host: ‘114.141.180.149’, port: ‘8001’ };

client.connect(options, function() { //‘connect’ listener console.log(‘client connected’);

//读取交易用pb头部 var head = fs.readFileSync(’./protobufhead’); client.write(head+’\r\n’,‘UTF8’); }); client.on(‘data’, function(data) { console.log('response: '+data.toString()); client.end(); });


3 回复

要在Node.js中创建一个带有SSL加密的Socket连接,你需要使用tls模块而不是net模块,因为tls模块提供了基于SSL/TLS的安全连接。以下是一个详细的步骤和示例代码,帮助你实现这个功能。

步骤

  1. 生成或获取SSL证书和密钥:通常这些文件由你的服务器提供。如果你是在本地测试,可以使用自签名证书。
  2. 修改客户端代码以使用tls模块:这将允许你通过SSL/TLS安全地连接到服务器。
  3. 配置tls.connect()方法:传入必要的选项,包括主机名、端口以及证书和密钥路径。

示例代码

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

// 客户端配置
const options = {
    host: '114.141.180.149', // 你的服务器地址
    port: 8001, // 你的服务器端口
    ca: fs.readFileSync('./server-cert.pem'), // 服务器证书路径
    rejectUnauthorized: false // 如果证书未被验证,可以选择忽略(仅用于测试)
};

// 创建TLS客户端
const client = tls.connect(options, () => {
    console.log('Connected to server using TLS.');
    
    // 发送数据
    const head = fs.readFileSync('./protobufhead');
    client.write(head + '\r\n', 'UTF-8');
});

// 监听数据接收事件
client.on('data', (data) => {
    console.log('Response from server:', data.toString());
});

// 监听错误事件
client.on('error', (err) => {
    console.error('Client error:', err.message);
});

// 监听断开连接事件
client.on('end', () => {
    console.log('Disconnected from server.');
});

解释

  • tls.connect() 方法用于创建一个与服务器的TLS连接。你可以传入一个配置对象,其中包含服务器地址、端口以及可选的证书和其他安全设置。
  • ca 参数用于指定服务器的证书路径,这确保客户端信任该服务器。
  • rejectUnauthorized 设置为 false 是为了在开发环境中方便测试,生产环境中应确保所有连接都经过验证。

以上代码展示了如何使用Node.js的tls模块建立一个安全的TCP连接,并发送/接收数据。希望这能解决你的问题!


自行解决了,应该使用 tls ,而不是使用net。

要在 Node.js 中创建一个安全的 Socket 连接(即 SSL/TLS),你可以使用 tls 模块。以下是一个示例代码,展示如何建立一个安全的 Socket 连接到服务器,并解释了一些关键点。

示例代码

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

// 服务器证书路径
const serverCertPath = './server-cert.pem';
const serverKeyPath = './server-key.pem';

// 配置 TLS/SSL 选项
const options = {
    host: '114.141.180.149',
    port: 8001,
    ca: fs.readFileSync(serverCertPath), // 服务器证书
    rejectUnauthorized: false, // 接受任何服务器证书(类似于你的iOS代码中的设置)
};

// 创建 TLS 客户端
const client = tls.connect(options, () => {
    console.log('Secure connection established.');
    
    // 读取并发送 protobuf 头部
    const head = fs.readFileSync('./protobufhead');
    client.write(head + '\r\n', 'UTF8');
});

client.on('data', (data) => {
    console.log('Response: ' + data.toString());
});

client.on('end', () => {
    console.log('Disconnected from the server.');
});

关键点解释

  1. tls 模块

    • tls 模块提供了基于 OpenSSL 的 TLS 和 SSL 协议支持。
    • 使用 tls.connect() 方法来创建一个安全的 TCP 连接。
  2. 配置选项

    • ca: 信任的 CA 证书列表。如果你需要验证服务器的证书,可以在这里指定证书文件。
    • rejectUnauthorized: 如果设置为 false,则会接受任何服务器证书,这与你的 iOS 代码中设置类似。但请注意,这可能带来安全风险。
  3. 读取并发送数据

    • 使用 fs.readFileSync 读取本地文件内容,并通过 client.write() 发送到服务器。
  4. 事件监听

    • connect 事件表示安全连接已建立。
    • data 事件处理从服务器接收的数据。
    • end 事件表示连接已断开。

通过上述步骤,你可以确保你的 Node.js 应用能够安全地连接到远程服务器。

回到顶部