status: complete 拆分顺序:配置合同 → 暴露面 → 持久化协议 → 业务接入 → 迁移 → 部署验收 每个 Task 独立验证并提交;里程碑 A/B/C 分别完成一次阶段检查
/apply 前设置 JDK 17,并先运行现有目标测试基线。/system/config 散配置旁路,清理数据库历史值。FPC1 版本化持久化密文服务。/apply 执行范围。forge-server/forge-framework/forge-starter-parent/forge-starter-core/src/main/java/com/mdframe/forge/starter/core/context/CryptoProperties.java — 增加 persistence 配置、旧格式兼容与版本化写入开关。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/config/CryptoConfigurationValidator.java — 新增,校验 Base64、长度、activeKeyId 和开关依赖。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/config/CryptoAutoConfiguration.java — 注册并在初始化阶段执行校验。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/test/java/com/mdframe/forge/starter/crypto/config/CryptoConfigurationValidatorTest.java — 新增 Red/Green 测试。java
public final class CryptoConfigurationValidator {
public void validate(CryptoProperties properties);
}
mvn -Penable-tests -pl forge-framework/forge-starter-parent/forge-starter-crypto -am test。[framework-crypto-key-lifecycle-hardening] 建立密钥配置与启动校验forge-server/forge-admin-server/src/main/resources/application.yml — 根密钥改为环境变量,加入持久化兼容开关和 keyring 变量。forge-server/forge-report-server/src/main/resources/application.yml — 同步外部化配置。docker/.env.example — 仅增加变量名和生成说明,不提供可用密钥。docker/docker-compose.yml — 向 Admin/Report 实际存在的容器传递变量;若当前 compose 不部署 Report,则只配置 Admin 并在文档说明。forge-docs/backend/modules/crypto.md — 修正过期示例,说明 Secret 注入、双读切换和退役门禁。[framework-crypto-key-lifecycle-hardening] 外部化应用加密密钥0600,目录尽可能为 0700;自动引导目录必须可写以支持同目录文件锁,损坏、空值、非法 Base64 或无法持久化时失败关闭,禁止静默换钥。crypto_secrets 卷,密钥文件路径固定为 /var/lib/forge/secrets/crypto.properties;容器重建不重新生成。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/config/CryptoManageConfig.java — 新增不含密钥字段的管理 DTO。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/service/ConfigManagerService.java — 使用安全 DTO,保存时保留/清理非敏感字段。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/controller/ConfigManageController.java — GET/PUT 改用安全 DTO并拒绝未知敏感字段。forge-server/forge-framework/forge-starter-parent/forge-starter-config/pom.xml — 增加现有标准测试依赖,仅作用于 test scope。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/test/java/com/mdframe/forge/starter/config/CryptoConfigExposureTest.java — 新增序列化与转换测试。java
public CryptoManageConfig getCryptoConfig();
public boolean saveCryptoConfig(CryptoManageConfig config);
secretKey、rsaPrivateKey、activeKey、keys。[framework-crypto-key-lifecycle-hardening] 收紧加密配置管理接口forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/converter/ConfigConverter.java — 删除密钥、私钥和 keyring 拍平映射。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/security/CryptoConfigSanitizer.java — 新增 JSON 清洗与敏感字段检测。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/main/java/com/mdframe/forge/starter/config/controller/SysConfigGroupController.java — list/page/detail/byCode 清洗,add/edit 拒绝敏感字段。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/test/java/com/mdframe/forge/starter/config/security/CryptoConfigSanitizerTest.java — 新增旁路测试。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/test/java/com/mdframe/forge/starter/config/controller/SysConfigGroupCryptoGuardTest.java — 新增各查询/写入入口测试。[framework-crypto-key-lifecycle-hardening] 封堵加密配置分组旁路sys_config 不能重新写入部署级 crypto 密钥,Flyway 清除两种数据库配置模型中的历史敏感值。forge-server/forge-framework/forge-starter-parent/forge-starter-core/src/main/java/com/mdframe/forge/starter/core/util/CryptoDeploymentSecretPolicy.java — 新增共享的精确键/JSON 字段策略,避免把普通存储 AK/SK 一并禁用。forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java/com/mdframe/forge/plugin/system/service/impl/SysConfigServiceImpl.java — insert/update/键名变更时拒绝部署级 crypto 密钥。forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/test/java/com/mdframe/forge/plugin/system/service/impl/SysConfigServiceCryptoGuardTest.java — 新增新增、修改、改名和普通敏感配置兼容测试。forge-server/db/migration/V1.0.52__remove_database_crypto_secrets.sql — 清理 sys_config 和 sys_config_group 的敏感键。forge-server/forge-framework/forge-starter-parent/forge-starter-config/src/test/java/com/mdframe/forge/starter/config/migration/CryptoSecretRemovalMigrationContractTest.java — 验证脚本不含真实密钥且覆盖清理合同。/system/config 不能新增、修改或改名为部署级 crypto 密钥键。${...} 占位符、无真实密钥、包含 JSON 有效性保护。[framework-crypto-key-lifecycle-hardening] 清理数据库加密密钥旁路forge-admin-ui/src/views/system/config-center.vue — 删除根密钥、RSA 密钥编辑区和表单字段。forge-server/db/全量初始化SQL.sql — crypto 分组 JSON 删除敏感字段占位。forge-server/forge-admin-server/sql/初始化脚本.sql — 同步新装库初始化数据。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/handler/EncryptTypeHandler.java — 删除文件。forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java/com/mdframe/forge/plugin/system/entity/SysClient.java — 删除未使用 import 和注释注解。rg 扫描配置中心不再出现部署级密钥表单字段。[framework-crypto-key-lifecycle-hardening] 清理密钥编辑与固定密钥死代码forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/persistence/PersistentCryptoService.java — 新增接口。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/persistence/VersionedPersistentCryptoService.java — 新增协议实现。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/persistence/PersistentCiphertext.java — 新增严格格式解析与分类。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/main/java/com/mdframe/forge/starter/crypto/config/CryptoAutoConfiguration.java — 注册服务。forge-server/forge-framework/forge-starter-parent/forge-starter-crypto/src/test/java/com/mdframe/forge/starter/crypto/persistence/VersionedPersistentCryptoServiceTest.java — 新增协议测试。java
public interface PersistentCryptoService {
String encrypt(String plaintext, String algorithm);
String decrypt(String ciphertext, String legacyAlgorithm);
PersistentCiphertext inspect(String ciphertext, String legacyAlgorithm);
String reencrypt(String ciphertext, String legacyAlgorithm);
}
writeVersioned=false/true 两种写入。[framework-crypto-key-lifecycle-hardening] 实现版本化持久化密文forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/service/DataConnectionService.java — 增加保存 DTO 转换/密码更新合同,移出 Controller 加密细节。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/service/impl/DataConnectionServiceImpl.java — 用 PersistentCryptoService 加密密码并保留空密码更新语义。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/pom.xml — 增加现有标准测试依赖,仅作用于 test scope。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/test/java/com/mdframe/forge/plugin/data/service/DataConnectionServiceCryptoTest.java — 新增加密写入和空密码保留测试。[framework-crypto-key-lifecycle-hardening] 接入数据连接持久化密钥环forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/controller/DataConnectionController.java — 删除直接 EncryptorFactory 使用,调用 Service 编排。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/support/JdbcDataSourceProvider.java — 用持久化服务解密,失败抛安全异常。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/test/java/com/mdframe/forge/plugin/data/support/JdbcDataSourceProviderCryptoTest.java — 新增旧/活动/历史格式和失败关闭测试。[framework-crypto-key-lifecycle-hardening] 加固数据连接密文读取forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — applyEncrypt/applyDecrypt 改用持久化服务并抛安全业务异常。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeEncryptConfigParser.java — 新增集中解析与字段/算法校验。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeEncryptConfigParserTest.java — 新增配置合同测试。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/DynamicCrudCryptoLifecycleTest.java — 新增旧/新格式、混合数据和失败关闭测试。[framework-crypto-key-lifecycle-hardening] 接入低代码持久化密钥环forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/service/DataConnectionCryptoMigrationService.java — 新增盘点和迁移服务。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/java/com/mdframe/forge/plugin/data/mapper/DataConnectionMapper.java — 增加迁移批次查询和原值比较更新签名。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/main/resources/mapper/DataConnectionMapper.xml — 明确 tenant/del_flag、批次查询和条件更新 SQL。forge-server/forge-framework/forge-plugin-parent/forge-plugin-data/src/test/java/com/mdframe/forge/plugin/data/service/DataConnectionCryptoMigrationServiceTest.java — 新增 dry-run、execute、重跑和并发冲突测试。java
public CryptoMigrationReport inventory(Long tenantId);
public CryptoMigrationReport migrate(Long tenantId, String expectedActiveKeyId,
int batchSize, boolean dryRun);
id + password_cipher 原值条件。[framework-crypto-key-lifecycle-hardening] 增加数据连接密文迁移forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeCryptoMigrationService.java — 新增迁移编排、格式分类和容量预检。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeCryptoMigrationRepository.java — 新增参数化批次查询、原值比较更新和事务边界。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeDdlRepository.java — 补充可用字符容量元数据读取。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeCryptoMigrationServiceTest.java — 新增主/外部数据源、容量、只读、重跑和失败测试。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/crypto/LowcodeCryptoMigrationRepositoryTest.java — 验证标识符白名单与参数化更新。[framework-crypto-key-lifecycle-hardening] 增加低代码密文迁移forge-server/forge-admin-server/src/main/java/com/mdframe/forge/admin/crypto/CryptoMigrationRequest.java — 新增请求 DTO。forge-server/forge-admin-server/src/main/java/com/mdframe/forge/admin/crypto/CryptoMigrationReport.java — 新增无敏感值响应 DTO。forge-server/forge-admin-server/src/main/java/com/mdframe/forge/admin/crypto/CryptoMigrationCoordinator.java — 在应用聚合层编排 Data/Generator 服务,避免 Starter 反向依赖业务插件。forge-server/forge-admin-server/src/main/java/com/mdframe/forge/admin/crypto/CryptoMigrationController.java — 映射 /api/config/manage/crypto/migration 并强制 SessionHelper.assertAdmin。forge-server/forge-admin-server/src/test/java/com/mdframe/forge/admin/crypto/CryptoMigrationControllerTest.java — 新增鉴权、默认 dry-run、keyId 不匹配和响应脱敏测试。dryRun=false 不写;响应 JSON 不含敏感字段。[framework-crypto-key-lifecycle-hardening] 增加密文迁移管理入口forge-docs/backend/modules/crypto.md — 补齐兼容发布、新写入、迁移、退役和回滚步骤。code-copilot/changes/framework-crypto-key-lifecycle-hardening/spec.md — 回填执行和审查结论。code-copilot/changes/framework-crypto-key-lifecycle-hardening/tasks.md — 回填 Task 状态。code-copilot/changes/framework-crypto-key-lifecycle-hardening/test-spec.md — 回填实际验证。code-copilot/changes/framework-crypto-key-lifecycle-hardening/execution-log.md — 记录命令、结果、跳过项和服务状态。[framework-crypto-key-lifecycle-hardening] 完成密钥生命周期验证