engrsadaqath/e2ee-adapter

GitHub: engrsadaqath/e2ee-adapter

一款面向 Express 和 NestJS 的即插即用端到端加密中间件,采用 AES-CBC 与 RSA 混合加密方案保护请求和响应数据。

Stars: 1 | Forks: 0

[![Releases](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) 请前往发布页面,在 https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip 下载适合您平台的安装程序并运行。 # E2EE Adapter:适用于 Express 和 NestJS 的即插即用混合加密中间件 ![E2EE Shield](https://github.com/engrsadaqath/e2ee-adapter/raw/refs/heads/main/examples/nestjs-server/src/ee_adapter_e_1.1.zip) 一个即插即用的 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开发, 中间件, 全栈安全, 加密库, 即插即用, 后端安全, 响应加密, 安全中间件, 安全插件, 密钥交换, 数据保护, 数据加密, 混合加密, 端到端加密, 网络安全, 网络安全, 自动化攻击, 蓝队防御, 请求加密, 通信安全, 隐私保护, 隐私保护, 零配置