项目概览1.1 项目定位RustyVault 是使用 Rust 语言编写目标是无缝替代 HashiCorp Vault。其核心动机来自 docs/docs/req.md有四点HashiCorp Vault 的开源许可证已从 MPL 2.0 切换为 BSL 1.1不再是 OSI 认可的开源协议Vault 缺乏除 FIPS 之外的密码合规能力特别是中国国密算法 SM2/SM3/SM4Vault 在密码计算密集场景下性能不足Vault 许多企业级特性Replication、Sentinel、Namespaces、MFA不开源。RustyVault 的设计目标来自 req.md用 Rust 编写以实现内存安全API 与数据格式与 HashiCorp Vault 完全兼容底层密码模块可配置OpenSSL / Tongsuo / 原生 Rust 密码库高性能密码计算高可用Active-Active 集群支持密码硬件HSM、加速卡、TEEOSI 认可的开源许可证Apache 2.0。1.2 关键元数据项目属性 值语言 Rust 2021 edition当前版本 0.3.1Cargo.toml许可证 Apache-2.0OSI 认可最新提交 2025-10-15fix: correct ErrBarrierUnsealing error matching二进制名 rvaultHTTP 框架 actix-web 4.9异步运行时 tokio通过 maybe-async 支持同步/异步双模式密码库 openssl crate默认/ Tongsuo铜锁国密支持配置格式 HCL通过 hcl-rs存储 file默认/ MySQLdiesel/ 通用 SQLsqlx含 MySQL/PostgreSQL/SQLite1.3 双重使用模式RustyVault 的一个独特设计是支持两种使用模式见 src/lib.rs 顶部文档独立应用模式编译为 rvault 二进制提供 RESTful API与 Vault CLI 兼容Crate 嵌入模式作为 rusty_vault crate 被其他 Rust 应用直接依赖无需独立部署。第二种模式是 HashiCorp Vault 所不具备的——Vault 的 Go 代码虽然也是 library binary 结构但其内部 API 并不稳定且未发布为公开 crate。RustyVault 已发布到 crates.iocrates.io/crates/rusty_vault这意味着 Rust 开发者可以像使用普通依赖一样在自己的应用中嵌入完整的密钥管理能力。代码规模与项目结构2.1 代码规模通过 find . -name “*.rs” | xargs wc -l 统计指标 数值Rust 源码总行数 46,862 行含测试的源文件数 60 个测试函数总数#[test] #[maybe_async::test] 296 个独立集成测试文件 1 个tests/test_default_logical.rs431 行最大单文件 approle/path_role.rs4,094 行unsafe 块出现文件数 9 个多为 FFI 调用 OpenSSL作为对比HashiCorp Vault 的 Go 代码量约为 50 万行含所有 builtin。RustyVault 的 4.7 万行约为其 1/10这既反映了功能覆盖范围的差距也反映了 Rust 在表达力上的紧凑性。2.2 目录结构RustyVault/├── bin/rusty_vault.rs # 二进制入口24 行仅调用 cli::Cli├── build.rs # 构建脚本注入编译时间/版本├── Cargo.toml # 依赖与 feature 声明├── diesel.toml # diesel ORM 配置MySQL 存储后端├── migrations/ # 数据库迁移脚本MySQL│ └── 2024-03-07-…_create_vault_table/├── docs/ # Docusaurus 文档站点│ └── docs/│ ├── design.md # 架构设计文档│ ├── req.md # 需求与动机文档│ ├── quick-start.md # 快速上手│ ├── install.md # 安装指南│ ├── crypto.md # 密码适配器文档│ └── backend/database/ # 数据库后端文档├── src/│ ├── lib.rs # 库入口定义 RustyVault 门面结构│ ├── core.rs # 核心引擎init/unseal/seal/handle_request│ ├── context.rs # 通用 KV 上下文任务管理│ ├── errors.rs # 错误类型枚举RvError│ ├── handler.rs # Handler/AuthHandler trait请求处理钩子│ ├── router.rs # 路径路由Trie 结构│ ├── shamir.rs # Shamir 秘密共享算法686 行│ ├── mount.rs # 挂载表管理MountTable/MountsRouter/MountsMonitor│ ├── module_manager.rs # 模块管理器动态加载/卸载模块│ ├── api/ # Rust 客户端 SDK同步 HTTP 客户端│ │ ├── logical.rs # 逻辑层读写删列表│ │ ├── sys.rs # 系统接口init/seal/mount/policy│ │ └── auth_token.rs # Token 认证接口│ ├── cli/ # 命令行接口│ │ ├── mod.rs # clap 命令定义│ │ ├── config.rs # HCL 配置解析│ │ └── command/ # 子命令实现server/status/operator/…│ ├── http/ # HTTP 服务层actix-web│ │ ├── mod.rs # 请求处理、Token 提取、TLS 客户端信息│ │ ├── logical.rs # /v1/* 逻辑请求路由│ │ ├── sys.rs # /v1/sys/* 系统请求路由│ │ └── metrics.rs # /metrics Prometheus 指标端点│ ├── logical/ # 逻辑层抽象trait 定义│ │ ├── backend.rs # Backend trait LogicalBackend 实现│ │ ├── request.rs # Request 结构│ │ ├── response.rs # Response 结构│ │ ├── auth.rs # Auth 结构认证结果│ │ ├── secret.rs # Secret 结构机密元数据│ │ ├── lease.rs # Lease 结构 TTL 计算算法│ │ ├── path.rs # Path 定义路径模式 操作│ │ ├── field.rs # Field 定义请求字段校验│ │ └── connection.rs # Connection连接信息│ ├── metrics/ # Prometheus 指标系统│ │ ├── manager.rs # MetricsManager│ │ ├── http_metrics.rs # HTTP RED 指标│ │ ├── system_metrics.rs # 系统 USE 指标CPU/内存/磁盘│ │ └── middleware.rs # actix 中间件│ ├── modules/ # 功能模块核心业务│ │ ├── mod.rs # Module trait 定义│ │ ├── system/ # 系统后端mount/auth/policy/audit/raw│ │ ├── auth/ # 认证框架│ │ │ ├── mod.rs # AuthModuleauth/ 挂载管理│ │ │ ├── token_store.rs # TokenStoretoken CRUD 父子关系│ │ │ └── expiration.rs # ExpirationManagerlease 过期管理│ │ ├── credential/ # 认证方法│ │ │ ├── token/ # token 认证CLI│ │ │ ├── userpass/ # 用户名密码认证│ │ │ ├── approle/ # AppRole 认证机器/服务│ │ │ └── cert/ # X.509 客户端证书认证│ │ ├── policy/ # 策略引擎│ │ │ ├── mod.rs # PolicyModule│ │ │ ├── policy.rs # Policy 结构 HCL 解析│ │ │ ├── policy_store.rs # PolicyStoreCRUD 缓存│ │ │ └── acl.rs # ACL 引擎Trie DashMap│ │ ├── kv/ # KV 机密引擎v1 风格│ │ ├── pki/ # PKI/CA 引擎│ │ │ ├── mod.rs # PkiModule│ │ │ ├── path_config_ca.rs # CA 配置│ │ │ ├── path_config_crl.rs # CRL 配置占位│ │ │ ├── path_root.rs # 根 CA 生成/删除│ │ │ ├── path_issue.rs # 证书签发│ │ │ ├── path_roles.rs # 角色管理│ │ │ ├── path_keys.rs # 密钥管理生成/导入/签名/验签/加解密│ │ │ ├── path_fetch.rs # 证书/CA/CRL 获取│ │ │ ├── path_revoke.rs # 证书撤销占位│ │ │ ├── field.rs # 字段定义│ │ │ └── util.rs # 工具函数│ │ └── crypto/ # 密码计算引擎│ │ ├── mod.rs # AES/SM4/公钥抽象│ │ └── crypto_adaptors/# OpenSSL/Tongsuo 适配器│ ├── storage/ # 存储层│ │ ├── mod.rs # Storage/Backend trait│ │ ├── barrier.rs # SecurityBarrier trait│ │ ├── barrier_aes_gcm.rs # AES-GCM 屏障实现│ │ ├── barrier_view.rs # BarrierView子视图隔离│ │ ├── physical/│ │ │ ├── file.rs # 文件后端│ │ │ └── mock.rs # 内存 mock测试用│ │ ├── mysql/ # MySQL 后端dieselfeature gated│ │ └── sqlx/ # 通用 SQL 后端sqlxfeature gated│ ├── utils/ # 工具集│ │ ├── cert.rs # 证书工具│ │ ├── crypto.rs # 密码工具│ │ ├── cidr.rs # CIDR 匹配│ │ ├── db.rs # 数据库 URL 解析│ │ ├── key.rs # KeyBundle密钥封装│ │ ├── locks.rs # 分段锁│ │ ├── ocsp.rs # OCSP 配置占位│ │ ├── policy.rs # 策略工具│ │ ├── salt.rs # Salt盐值│ │ ├── seal.rs # SealBoxShamir AES-GCM 容器│ │ ├── sock_addr.rs # Socket 地址抽象│ │ ├── string.rs # 字符串工具│ │ └── token_util.rs # Token 参数工具│ └── test_utils.rs # 测试工具1,526 行└── tests/└── test_default_logical.rs # 集成测试3. 核心架构与内部机制3.1 三层架构RustyVault 的架构见 docs/docs/design.md分为三层Crypto AdaptorsStorage BackendsRustyVault ModulesRustyVault CoreRustyVault InterfaceHTTPS Serveractix-webCLI ClientclapRust SDKapi/Core EngineModule ManagerRouterTrieMount TableMonitorSecurity BarrierAES-GCMShamir SSSHandler Chainpre_route/route/post_route/logSystem ModuleAuth ModuleTokenStore ExpirationPolicy ModuleACL EnginePKI ModuleKV ModuleCrypto ModuleCert AuthUserPass AuthAppRole AuthFile BackendMySQL BackenddieselSQL Backendsqlx: MySQL/PG/SQLiteOpenSSL AdaptorTongsuo Adaptor国密 SM2/SM3/SM43.2 请求处理全链路RustyVault 的请求处理见 src/core.rs::handle_request采用 Handler Chain 模式与 Vault 的设计高度一致Barrier BackendLogical BackendRouterHandler ChainCoreactix-webClientBarrier BackendLogical BackendRouterHandler ChainCoreactix-webClientPhase 1: PreRoutePhase 2: Auth (TokenStore)Phase 3: PostAuth (PolicyStore)拒绝则返回 403Phase 4: RoutePhase 5: PostRoutePhase 6: LogHTTP Request X-Vault-Token提取 Token (Header/Cookie)handle_request(req)检查 sealed 状态pre_route(req)路径匹配绑定 Backend Storage View注入 req.storage / req.match_pathpre_auth(req) [TokenStore]lookup token (salted)TokenEntry设置 req.auth (policies)post_auth(req) [PolicyStore]ACL 检查 (Trie 匹配)route(req)handle_request(req)字段校验 路径匹配加密读写结果Responsepost_route(req, resp)注册 Lease (ExpirationManager)log(req, resp)ResponseResponseHTTP Response3.3 封印/解封机制