密钥服务
引用文件
本文引用的文件
- EncryptionUtils.java
- TaskSecretKeyServiceImpl.java
- TaskSecretKeyMapper.java
- TaskSecretKeyDO.java
- TaskSecretKeyTypeEnum.java
- TaskSecretKeyPageReqVO.java
- TaskSecretKeySaveReqVO.java
- AppSdkSecurityKeyApiImpl.java
- AppSdkSecurityKeyApi.java
- SecretKeyDTO.java
- ApiConstants.java
- 签名和加解密.md
- monitor.md
- navigation.md
目录
简介
本技术文档围绕密钥服务展开,覆盖设备密钥管理机制(生成、存储、轮换、销毁)、加密解密实现(对称加密、签名与验签、哈希验证)、密钥分发与同步(下发、版本控制、一致性与冲突处理)、安全策略(隔离、访问控制、审计与合规)、以及监控运维(使用统计、安全告警、合规报告、备份恢复)。同时提供密钥API接口文档与客户端集成指南,帮助开发者与运维人员快速理解与落地。
项目结构
密钥服务位于任务模块(task)中,采用“接口 + 服务 + 数据对象 + Mapper + DTO + 枚举”的分层组织方式,并通过通用安全工具类提供加密、解密与签名能力。关键目录与文件如下:
- 通用安全工具:EncryptionUtils(对称加密、解密、签名、MD5)
- 任务模块密钥管理:TaskSecretKeyServiceImpl(业务逻辑)、TaskSecretKeyMapper(数据访问)、TaskSecretKeyDO(领域对象)
- 密钥类型枚举:TaskSecretKeyTypeEnum(域名分发、固件 、签名)
- 控制器参数VO:TaskSecretKeyPageReqVO、TaskSecretKeySaveReqVO
- RPC接口:AppSdkSecurityKeyApi(Feign声明式接口)、AppSdkSecurityKeyApiImpl(实现)
- DTO:SecretKeyDTO(对外传输对象)
- API常量:ApiConstants(服务名、前缀、版本)
- 文档:签名与加解密对接文档、监控中心文档
图表来源
- EncryptionUtils.java
- TaskSecretKeyServiceImpl.java
- TaskSecretKeyMapper.java
- TaskSecretKeyDO.java
- TaskSecretKeyTypeEnum.java
- TaskSecretKeyPageReqVO.java
- TaskSecretKeySaveReqVO.java
- AppSdkSecurityKeyApi.java
- AppSdkSecurityKeyApiImpl.java
- SecretKeyDTO.java
- ApiConstants.java
章节来源
- TaskSecretKeyServiceImpl.java
- TaskSecretKeyMapper.java
- TaskSecretKeyDO.java
- TaskSecretKeyTypeEnum.java
- TaskSecretKeyPageReqVO.java
- TaskSecretKeySaveReqVO.java
- AppSdkSecurityKeyApi.java
- AppSdkSecurityKeyApiImpl.java
- SecretKeyDTO.java
- ApiConstants.java
核心组件
- 加密工具类 EncryptionUtils:提供 AES/CBC/PKCS5Padding 对称加解密、MD5 签名与验签、时间差校验。
- 业务服务 TaskSecretKeyServiceImpl:负责密钥的创建、更新、删除、分页查询、按类型+键查询与本地缓存穿透。
- 数据访问 TaskSecretKeyMapper:基于 MyBatis Plus 的基础 Mapper,提供分页查询。
- 领域对象 TaskSecretKeyDO:封装密钥类型、键、值(加密存储)、备注、时间差等字段,并提供明文解密方法。
- 枚举 TaskSecretKeyTypeEnum:密钥类型(域名分发AES、固件AES、域名签名)。
- 控制器参数 VO:分页与保存请求参数。
- RPC 接口与实现:AppSdkSecurityKeyApi(Feign)与 AppSdkSecurityKeyApiImpl(实现),提供按 key+type 查询密钥并返回明文。
- DTO SecretKeyDTO:对外传输对象,包含密钥基本信息与明文值。
- API 常量 ApiConstants:统一服务名、前缀与版本。
章节来源
- EncryptionUtils.java
- TaskSecretKeyServiceImpl.java
- TaskSecretKeyMapper.java
- TaskSecretKeyDO.java
- TaskSecretKeyTypeEnum.java
- TaskSecretKeyPageReqVO.java
- TaskSecretKeySaveReqVO.java
- AppSdkSecurityKeyApi.java
- AppSdkSecurityKeyApiImpl.java
- SecretKeyDTO.java
- ApiConstants.java
架构总览
密钥服务采用“RPC + 本地缓存 + 数据库”的架构:
- 外部系统通过 Feign 接口调用密钥服务,按 key+type 获取密钥。
- 服务端在本地缓存命中后返回,未命中则查询数据库并回填缓存。
- 密钥值在数据库中加密存储,返回给调用方前进行解密。
- 加密与签名由通用工具类提供,确保跨模块一致性。
图表来源
- AppSdkSecurityKeyApiImpl.java
- TaskSecretKeyServiceImpl.java
- TaskSecretKeyMapper.java
- TaskSecretKeyDO.java
- EncryptionUtils.java
详细组件分析
加密与签名组件(EncryptionUtils)
- 对称加密:AES/CBC/PKCS5Padding,随机IV(16字节),IV前置拼接并Base64输出;密钥长度支持16/24/32字节。
- 解密:从Base64解码后分离IV与密文,使用相同密钥与IV完成解密。
- 签名:MD5签名,输入包含域名、MAC、CPU、时间戳、盐值与SDK版本等字段,严格顺序与拼接。
- 验签:计算时间差阈值(毫秒),超限直接拒绝;否则重新计算签名并与传入签名比对。
- MD5:固定使用UTF-8编码,输出小写十六进制串。
图表来源
章节来源
密钥管理服务(TaskSecretKeyServiceImpl)
- 创建/更新:对密钥值进行合法性校验(字符集、长度、多字节字符),支持16/24/32字符长度。
- 查询:支持按主键、分页、按类型+键查询;按类型+键查询支持本地缓存穿透。
- 删除:校验存在后删除。
- 明文解密:在返回DTO前调用工具类解密数据库中加密的密钥值,兼容历史未加密数据。
图表来源
章节来源
密钥类型与参数
- 密钥类型枚举:域名分发AES、固件AES、域名签名。
- 分页请求参数:支持按类型、键、值、备注、创建时间区间查询。
- 保存请求参数:包含主键、类型、键、值、时间差、备注。
章节来源