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

发布时间:2026/6/10 23:18:36

Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案) Spring Boot 配置文件敏感信息加密Jasypt 企业级完整方案一、前言Spring Boot 项目中application.yml、application.properties配置文件会存储大量敏感信息包括数据库账号密码、Redis 密码、接口密钥、短信/OSS 秘钥等。如果以明文存储一旦代码仓库泄露、服务器文件被窃取会造成核心数据安全事故。因此生产环境必须对配置文件敏感信息加密存储。本文采用行业通用方案Jasypt无侵入、开箱即用支持 Spring Boot 自动解密适配所有配置项是中小型项目首选安全方案。二、Jasypt 方案优势零业务代码侵入仅修改配置文件项目启动自动解密业务层无需手动处理支持 AES 高强度加密算法安全性高支持环境变量、启动参数传递密钥避免密钥硬编码兼容 yml、properties 所有配置文件三、版本依赖引入适配 Spring Boot2.x / 3.x引入 Jasypt 官方启动器。3.1 Maven 依赖pom.xml!-- Spring Boot 配置文件加密 Jasypt --dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.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_KEYSpringBoot2026;publicstaticvoidmain(String[]args){// 需要加密的明文数据库密码、Redis密码等StringplainText123456;StandardPBEStringEncryptorencryptornewStandardPBEStringEncryptor();EnvironmentPBEConfigconfignewEnvironmentPBEConfig();config.setPassword(SECRET_KEY);// 使用高强度AES加密算法config.setAlgorithm(PBEWITHHMACSHA512ANDAES_256);config.setIvGeneratorClassName(org.jasypt.iv.RandomIvGenerator);encryptor.setConfig(config);// 加密StringcipherTextencryptor.encrypt(plainText);// 解密验证用StringdecryptTextencryptor.decrypt(cipherText);System.out.println(明文plainText);System.out.println(密文ENC(cipherText));System.out.println(解密验证decryptText);}}运行 main 方法即可生成ENC(密文)格式字符串直接放入配置文件即可。4.2 IDEA 插件 / 在线工具临时使用开发测试可使用 Jasypt 在线加解密工具输入明文和自定义密钥快速生成密文生产环境禁止使用在线工具避免密钥泄露。五、配置文件改造YML / PropertiesJasypt 默认规则所有被 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?useUnicodetruecharacterEncodingutf-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.algorithmPBEWITHHMACSHA512ANDAES_256 jasypt.encryptor.iv-generator-class-nameorg.jasypt.iv.RandomIvGenerator # 数据库配置 spring.datasource.usernameENC(xxxx密文xxxx) spring.datasource.passwordENC(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 完全兼容分布式配置中心配置中心存储密文本地启动注入密钥兼顾配置统一和数据安全。十、总结Jasypt 是 Spring Boot 配置加密最优轻量方案零侵入、高安全、易落地核心规范配置文件存密文密钥动态注入绝不硬编码所有数据库、中间件、接口秘钥必须加密存储杜绝明文泄露风险生产环境必须使用启动参数/环境变量传递密钥禁止写死在项目配置中。

相关新闻