当前位置: 首页 > news >正文

Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)

Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)

一、前言

Spring Boot 项目中,application.ymlapplication.properties配置文件会存储大量敏感信息,包括数据库账号密码、Redis 密码、接口密钥、短信/OSS 秘钥等。

如果以明文存储,一旦代码仓库泄露、服务器文件被窃取,会造成核心数据安全事故。因此生产环境必须对配置文件敏感信息加密存储

本文采用行业通用方案:Jasypt,无侵入、开箱即用,支持 Spring Boot 自动解密,适配所有配置项,是中小型项目首选安全方案。

二、Jasypt 方案优势

  • 零业务代码侵入,仅修改配置文件

  • 项目启动自动解密,业务层无需手动处理

  • 支持 AES 高强度加密算法,安全性高

  • 支持环境变量、启动参数传递密钥,避免密钥硬编码

  • 兼容 yml、properties 所有配置文件

三、版本依赖引入

适配 Spring Boot2.x / 3.x,引入 Jasypt 官方启动器。

3.1 Maven 依赖(pom.xml)

<!-- Spring Boot 配置文件加密 Jasypt --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version></dependency>

版本说明:3.0.5 兼容 Spring Boot 2.7+、3.x 全版本,稳定无兼容问题。

四、生成密文(核心步骤)

需要先将明文密码、密钥通过 Jasypt 算法加密为密文,提供三种常用生成方式,推荐代码工具类生成(最稳定)。

4.1 自定义工具类生成密文(推荐)

编写测试工具类,指定加密密钥和明文,生成可直接使用的密文。

importorg.jasypt.encryption.pbe.StandardPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.EnvironmentPBEConfig;/** * Jasypt 加解密工具类 * 用于生成配置文件密文、测试解密 */publicclassJasyptUtil{// 自定义加密密钥(生产环境务必更换复杂密钥)privatestaticfinalStringSECRET_KEY="SpringBoot@2026";publicstaticvoidmain(String[]args){// 需要加密的明文(数据库密码、Redis密码等)StringplainText="123456";StandardPBEStringEncryptorencryptor=newStandardPBEStringEncryptor();EnvironmentPBEConfigconfig=newEnvironmentPBEConfig();config.setPassword(SECRET_KEY);// 使用高强度AES加密算法config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");encryptor.setConfig(config);// 加密StringcipherText=encryptor.encrypt(plainText);// 解密(验证用)StringdecryptText=encryptor.decrypt(cipherText);System.out.println("明文:"+plainText);System.out.println("密文:ENC("+cipherText+")");System.out.println("解密验证:"+decryptText);}}

运行 main 方法,即可生成ENC(密文)格式字符串,直接放入配置文件即可。

4.2 IDEA 插件 / 在线工具(临时使用)

开发测试可使用 Jasypt 在线加解密工具,输入明文和自定义密钥,快速生成密文,生产环境禁止使用在线工具,避免密钥泄露。

五、配置文件改造(YML / Properties)

Jasypt 默认规则:所有被 ENC() 包裹的内容,项目启动时自动解密

5.1 application.yml 配置

# Jasypt 加密配置jasypt:encryptor:# 加密密钥(生产环境通过环境变量/启动参数注入,不硬编码)password:${JASYPT_ENCRYPTOR_PASSWORD:}# 加密算法algorithm:PBEWITHHMACSHA512ANDAES_256iv-generator-class-name:org.jasypt.iv.RandomIvGenerator# 数据库配置(敏感信息加密)spring:datasource:url:jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8username:ENC(xxxx密文xxxx)password:ENC(xxxx密文xxxx)# Redis 配置redis:password:ENC(xxxx密文xxxx)

5.2 application.properties 配置

# Jasypt 配置 jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:} jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256 jasypt.encryptor.iv-generator-class-name=org.jasypt.iv.RandomIvGenerator # 数据库配置 spring.datasource.username=ENC(xxxx密文xxxx) spring.datasource.password=ENC(xxxx密文xxxx)

六、密钥安全注入(生产核心)

绝对禁止将加密密钥硬编码在配置文件中,否则加密无意义。生产环境提供两种安全注入方式。

6.1 启动参数传递(推荐)

项目启动时通过命令行传入密钥,密钥不落地、不提交代码库。

java-jaryour-project.jar--jasypt.encryptor.password=自定义复杂密钥

6.2 系统环境变量传递

服务器提前配置环境变量JASYPT_ENCRYPTOR_PASSWORD,项目自动读取。

# Linux 临时配置exportJASYPT_ENCRYPTOR_PASSWORD=自定义复杂密钥# 启动项目java-jaryour-project.jar

七、解密验证测试

编写测试接口,验证配置是否正常解密,确保项目可正常读取明文配置。

importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassConfigTestController{@Value("${spring.datasource.password}")privateStringdbPassword;@GetMapping("/config/test")publicStringtest(){return"数据库密码解密后明文:"+dbPassword;}}

启动项目访问接口,能正常输出明文密码,说明加解密配置生效。

八、常见问题与避坑指南

8.1 启动报错:Invalid key size

原因:JDK 默认密钥长度受限,不支持 256 位 AES 加密

解决方案:使用 Jasypt 3.0+ 版本,自动兼容无限制密钥,无需手动替换 JCE 包。

8.2 密钥配置后解密失败

  • 加密、解密必须使用同一个密钥、同一个算法

  • 密文禁止手动修改、空格、换行

  • 确认启动时成功注入密钥,无参数覆盖

8.3 代码提交安全问题

配置文件只提交密文,密钥通过启动参数/环境变量注入,彻底杜绝密钥泄露。

九、高级扩展(企业级优化)

9.1 自定义加密标识

默认使用ENC(),可自定义前后缀,避免冲突。

jasypt:encryptor:prefix:CIPHER(suffix:)

9.2 配合 Nacos / Apollo 配置中心

Jasypt 完全兼容分布式配置中心,配置中心存储密文,本地启动注入密钥,兼顾配置统一和数据安全。

十、总结

  1. Jasypt 是 Spring Boot 配置加密最优轻量方案,零侵入、高安全、易落地;

  2. 核心规范:配置文件存密文,密钥动态注入,绝不硬编码

  3. 所有数据库、中间件、接口秘钥必须加密存储,杜绝明文泄露风险;

  4. 生产环境必须使用启动参数/环境变量传递密钥,禁止写死在项目配置中。

http://www.gsyq.cn/news/1500435.html

相关文章:

  • 2026年滑块图形验证码服务商推荐:安全与体验兼得的选择
  • 3DS游戏文件转换解决方案:从CCI到CIA的高效处理流程
  • 卫生间漏水维修全攻略:上海尤卉教你快速排查与解决漏水问题
  • 皮皮出海:助力国内企业出海增长
  • 百度网盘Mac版功能增强方案:技术实现与部署指南
  • 企业真人数字人制作怎么选?2026低成本高精度制作平台性价比对比
  • 执行计划深度解析:从 type 到 Extra,榨干 EXPLAIN 的价值
  • 网盘直链下载助手终极指南:免费获取八大网盘真实下载地址
  • 测评|苏州外贸工厂做GEO应该怎么选服务商?靠谱GEO服务商推荐? - 极义GEO
  • i.MX 8ULP硬件设计:电源时序与未用接口处理实战指南
  • 终极Qobuz无损音乐下载器:专业级音乐库构建完整指南
  • 数据的加密与解密(23:22)
  • 压敏电阻 Cp 参数怎么看?电源端与信号端应用差异解析
  • 硫酸钙防静电地板防潮原理揭秘!华竞公司产品实际应用效果如何
  • ChatGPT Plus、Claude Pro、Gemini Pro 怎么选?国内用户别乱花钱
  • 电力电子技术:源网荷储系统的关键装备
  • 智谷洞察|十五五央国企品牌工作的思考与解读之(四):品牌出海,不仅要“走出去”更要“走进去”
  • Agent应用指南:利用GET请求获取理想汽车门店位置信息
  • 谱梦AI + 音乐:手把手教你用 AI 工具生成原创音乐并上传到汽水音乐
  • 2026年青岛低价企业管理内训靠谱吗?这些判断技巧帮你辨清优劣
  • 解密企业级智能视频中台:基于 Docker 与边缘计算的 GB28181/RTSP 异构架构设计(支持源码交付)
  • 5分钟掌握m4s-converter:永久保存B站视频的完整解决方案
  • OJ平台远端判题子系统开发(九):性能优化与代码安全检测
  • Meshroom终极指南:免费开源的3D重建与视觉编程工具箱
  • GPT-4、DeepSeek、Claude、文心一言:多模型 × 8个投资分析场景横评实测(附测试代码)
  • CentOS 7.9 安装postgreSQL数据库
  • 1.5万星的m3u8下载神器,命令行搞定一切视频流
  • 智慧职教自动化学习脚本终极指南:3分钟告别手动刷课烦恼
  • 零基础理财指南:从底层工具到基金实战
  • 容器云:当应用学会了“打包”自己