Node.js tlsSocket.exportKeyingMaterial() 方法

2025年3月15日 | 4分钟阅读

在本文中,我们将讨论 Node.js 中的 tlsSocket.exportKeyingMaterial() 函数,包括其语法、参数和示例。

Node.js 中的 tlsSocket.exportKeyingMaterial() 函数是什么?

Node.js 的 tls 模块中的 TLSSocket 类有一个内置的 API,称为 tlsSocket.exportKeyingMaterial(). 它的目的是提供通过 TLS 握手获得的指定数量的密钥材料(字节)。这些密钥材料可用于各种加密过程,以防止不同类型的攻击,包括重放攻击、中间人 (MITM) 攻击以及针对网络协议的某些类型的密钥泄露。

通过调用 exportKeyingMaterial() 方法,应用程序可以使用这些加密密钥的子集,以用于典型的 TLS 操作之外的目的。此方法需要参数,包括所需的密钥材料长度、用于标识使用上下文的标签,以及可选的上下文缓冲区以提供进一步的派生上下文。由于这种灵活性,应用程序可以为特定协议、安全会话或其他加密过程生成密钥,而不会损害 TLS 会话的完整性。

目的和用法

tlsSocket.exportKeyingMaterial() 方法通常用于提供对从 TLS 握手中获得的密钥材料的访问。TLS 协议,例如 HTTP/2、WebRTC 和需要额外安全功能的自定义协议,都可以从这种密钥材料提供的增强安全性中受益。

语法

它具有以下语法:

参数

  • 长度:此整数参数指示所需的密钥材料字节数。
  • 标签:在派生过程中使用的字符串,称为标签。它有助于确保密钥材料仅限于使用它的特定协议或应用程序。
  • 上下文:上下文(一个缓冲区)作为附加的唯一性层。密钥材料派生过程将其与标签合并。

返回值

该过程以缓冲区形式返回所需的密钥材料字节数。然后,此缓冲区可用于在各种加密操作中保护网络通信。

用例

以下是 tlsSocket.exportKeyingMaterial() 函数在 Node.js 中的一些用例:

  • HTTP/2:它用于在 TLS 默认提供的密钥之外获取更多的加密和完整性密钥。
  • WebRTC:为 WebRTC 派生安全实时传输协议 (SRTP) 密钥,该协议加密音频和视频流。
  • 自定义协议:适用于任何需要安全派生 TLS 会话密钥的自定义协议。

如何生成公用证书和私钥?

私钥:将以下密钥复制并粘贴到记事本中

将文件名保存为 private.pem

公用证书:将以下密钥复制并粘贴到记事本中

将文件名保存为 public.pem

示例

让我们举一个例子来说明 Node.js 中的 tlsSocket.exportKeyingMaterial() 函数。

输出

 
Sever listening at 125.0.0.1, on port 1348
Client closed successfully
Received: keying material : 10, 183, 131,....... 52, 121, 159
Server closed successfully   

说明

使用 Node.js 代码配置基本的 TLS 服务器和客户端。除了指定服务器的 host 和 Port 外,它还导入所需的模块 tls 和 fs。为了便于测试,TLS 选项的私钥和公用证书文件中的 rejectUnauthorized 设置为 false。创建后,服务器等待连接建立,打印接收到的数据,然后关闭。一旦客户端和服务器连接,客户端使用 client.exportKeyingMaterial() 获取 128 字节标记为“client finished”的密钥材料,并将其传达给服务器。此时客户端关闭,服务器正确关闭并生成其接收到的数据。