展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 在SpringBoot项目中使用Jasypt加密敏感配置信息的完整方案

在SpringBoot项目中使用Jasypt加密敏感配置信息的完整方案

在SpringBoot项目中,Jasypt可加密数据库密码等敏感配置信息,避免明文风险。通过引入依赖、配置加密算法与密钥,生成ENC(密文)写入配置文件,密钥从环境变量或K8sSecret获取,实现配置零明文,提升安全性。

本文目录

    在Spring Boot项目中,数据库密码、API密钥这类敏感信息直接以明文形式写在application.yml里,有多危险?相当于把家门钥匙插在门锁上,路人随手就能掏走。大量安全事件表明,配置文件中的明文凭据已成为企业数据泄露的第二大来源。Jasypt(Ja va Simplified Encryption)是Spring Boot官方推荐的配置加密方案,接入成本极低,却能解决大问题。下面从环境配置、完整代码示例到多环境部署与常见坑点,系统梳理整个加密方案的全流程。

    在SpringBoot项目中使用Jasypt加密敏感配置信息的完整方案

    一、为何需要配置文件加密

    在application.yml中直接写入数据库密码,相当于把家门钥匙插在门锁上。大量安全事件表明,配置文件中的明文凭据已成为企业数据泄露的第二大来源。常见的安全风险包括:

    • 版本控制系统历史残留:即使后续修改了密码,Git历史中仍保留旧版本密码,任何有仓库访问权限的人均可通过git log找回。
    • CI/CD流水线暴露:部署过程中控制台打印的配置可能被日志系统捕获,导致凭据意外泄露。
    • 权限扩散风险:开发、测试、运维等多个角色均可访问配置文件,权限管理链条越长,泄露风险越大。

    Jasypt所遵循的是一种“防御纵深”思想——即便代码仓库或配置文件被攻破,攻击者也拿不到可用的明文密码。

    二、Ma ven依赖配置与环境要求

    2.1 依赖引入

    在pom.xml中添加Jasypt Spring Boot Starter依赖。注意该starter内置了兼容的jasypt-core,无需单独引入原生Jasypt库。

    
        com.github.ulisesbocchio
        jasypt-spring-boot-starter
        3.0.5
    

    2.2 版本兼容性对照表

    Spring Boot版本推荐Jasypt版本说明
    2.4.x - 2.7.x3.0.5+兼容JDK 11+
    3.0.x - 3.5.x3.0.5+ 或 4.x3.0.5已兼容Spring Boot 3.x及Jakarta EE 9+

    Jasypt 3.x版本配合Spring Boot 2.4+以上版本使用效果最佳,JDK 8及以上均无兼容问题。

    2.3 JDK要求

    JDK 8或更高版本均可支持,项目须使用Ma ven或Gradle构建工具。

    三、添加Jasypt配置

    在application.yml中添加以下配置,告诉Jasypt使用何种算法和密钥(用于生成密文):

    jasypt:
      encryptor:
        password: ${JASYPT_ENCRYPTOR_PASSWORD:}  # 从环境变量读取,留空则抛出异常
        algorithm: PBEWITHHMACSHA512ANDAES_256  # 推荐的高级加密算法
        iv-generator-classname: org.jasypt.iv.RandomIvGenerator  # 为强算法配置随机IV生成器

    重要:jasypt.encryptor.password绝不应以明文写入配置文件中并提交到版本控制。上述写法从环境变量JASYPT_ENCRYPTOR_PASSWORD中读取密钥值,是最安全的生产部署方式。

    如果使用的是旧版(PBEWithMD5AndDES)或遇到解密失败,可能还需补充iv-generator-classname: org.jasypt.iv.NoIvGenerator。

    四、生成加密密文的多种方法

    4.1 方法一:CLI命令行工具(推荐生产环境使用)

    下载Jasypt JAR包后执行以下命令生成密文:

    ja va -cp jasypt-3.0.5.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI 
      input="数据库明文密码" 
      password="你的主密钥" 
      algorithm=PBEWITHHMACSHA512ANDAES_256

    输出结果如BLC3UQBxshlcA9tnMyJL7w==,之后以ENC(密文)的形式放入配置文件中。

    4.2 方法二:代码生成工具类(适合开发调试)

    编写一个Jasypt工具类,一次性生成密文备用:

    import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
    import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
    
    public class JasyptUtil {
        public static void main(String[] args) {
            StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
            EnvironmentPBEConfig config = new EnvironmentPBEConfig();
            
            // 加密算法必须与配置文件中保持一致
            config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
            config.setPassword("YOUR_MASTER_SECRET_KEY");
            encryptor.setConfig(config);
            
            String plainText = "123456";
            String cipherText = encryptor.encrypt(plainText);
            System.out.println("密文:" + cipherText);
            System.out.println("解密验证:" + encryptor.decrypt(cipherText));
        }
    }
    

    说明:Jasypt每次调用encrypt()生成的密文不同,但解密后均能得到相同的明文,这是其内部使用了随机盐值(salt)的正常行为。

    五、将密文写入数据源配置

    拿到密文后,将其放入数据源的密码字段中:

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
        username: root
        password: ENC(wDk3zX2h1f9pRq8yLmNk5vJb=)  # 加密后的密文

    框架在启动时会自动识别ENC(…)格式并调用Jasypt解密,无须在业务代码中做任何额外处理。如果使用的是Druid连接池,请确保加解密作用于 spring.datasource.password,而非spring.datasource.druid.password,后者可能存在兼容性问题。

    六、密钥管理的安全实践

    生产环境中,密钥与密文必须严格分离存储。以下是推荐的安全注入方式:

    6.1 方式一:操作系统环境变量(最普遍)

    Linux/macOS(~/.bashrc或~/.zshrc):

    export JASYPT_ENCRYPTOR_PASSWORD=你的强密钥

    Windows:通过“系统属性 → 环境变量”添加JASYPT_ENCRYPTOR_PASSWORD。

    6.2 方式二:JVM启动参数

    ja va -Djasypt.encryptor.password=你的强密钥 -jar your-app.jar

    6.3 方式三:Docker容器部署

    docker run -e JASYPT_ENCRYPTOR_PASSWORD="你的强密钥" your-image

    或在docker-compose.yml中定义环境变量块。

    6.4 Kubernetes生产推荐

    apiVersion: v1
    kind: Secret
    metadata:
      name: jasypt-secret
    type: Opaque
    data:
      password: 
    ---
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          containers:
          - env:
            - name: JASYPT_ENCRYPTOR_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: jasypt-secret
                  key: password

    6.5 IntelliJ IDEA调试运行配置

    IDE默认不继承系统环境变量,需在Run/Debug Configuration → Environment variables中手动添加JASYPT_ENCRYPTOR_PASSWORD=你的密钥。

    七、支持的加密算法与选型建议

    7.1 常见可用算法

    Jasypt支持以下PBE类加密算法:

    算法安全性推荐度
    PBEWITHHMACSHA512ANDAES_256强加密⭐⭐⭐ 推荐(生产首选)
    PBEWITHHMACSHA256ANDAES_128中等⭐⭐(性能均衡)
    PBEWithMD5AndDES弱加密⭐ 不推荐(JDK 17+已禁用)

    版本差异:Jasypt 3.x版本后默认加密方式已从PBEWithMD5AndDES切换为PBEWITHHMACSHA512ANDAES_256,对应也需指定RandomIvGenerator。

    7.2 如何查看当前JDK支持的算法

    在Ja va代码中执行以下脚本,快速列出所有可用算法:

    import ja va.security.Security;
    public class AlgorithmList {
        public static void main(String[] args) {
            for (ja va.security.Provider provider : Security.getProviders()) {
                for (Object key : provider.keySet()) {
                    String str = (String) key;
                    if (str.toLowerCase().contains("pbewith")) {
                        System.out.println(str);
                    }
                }
            }
        }
    }
    

    八、多环境配置与启动方式

    8.1 开发环境

    开发阶段仍建议使用环境变量注入,与生产保持一致,避免环境差异导致的加解密失败。

    8.2 测试/生产环境

    严格将密钥存放于环境变量或K8s Secret中,配置文件中绝不出现明文密钥。关键安全建议:

    • 不同的环境使用不同的加密密钥(防止跨环境凭据复用);
    • 定期轮换加密密钥;
    • 结合配置中心(如Nacos、Apollo)时,确保加密后的密文存储在配置中心,密钥通过环境变量下发。

    九、常见异常排查清单

    问题1:EncryptionOperationNotPossibleException

    原因:jasypt.encryptor.password未正确注入,或加密/解密时使用的算法、密钥不一致。

    解决方法:

    • 检查JVM启动参数或环境变量是否生效;
    • 确认配置文件中的算法与加密密文时使用的算法相同;
    • 若在JDK 17环境中使用旧算法PBEWithMD5AndDES,需显式指定iv-generator-classname: org.jasypt.iv.NoIvGenerator。

    问题2:Failed to bind properties under 'spring.datasource.password'

    原因:Druid连接池场景下,加解密作用于Druid专用属性路径被遗漏。

    解决方法:将密码统一放置在spring.datasource.password中,Druid配置可通过引用此值解决,而非使用spring.datasource.druid.password。

    问题3:环境变量JASYPT_ENCRYPTOR_PASSWORD不生效

    排查步骤:

    1. 确认变量名拼写为全大写,并检查末尾无多余空格;
    2. Windows中设置后需重启命令行或IDE方可生效;
    3. IntelliJ IDEA需在Run Configuration中手动添加此环境变量;
    4. 若使用mvn spring-boot:run启动,Ma ven进程默认不继承父终端变量,改用ja va -jar方式。

    问题4:NoClassDefFoundError

    原因:依赖版本不匹配或引入了错误的库。

    解决方法:确保使用的是jasypt-spring-boot-starter而非原生jasypt库,且版本与Spring Boot版本兼容。

    十、最佳实践总结

    1. 绝不在配置文件中明文写入密钥。永远使用环境变量、K8s Secret或专用密钥管理服务(如Vault)注入;
    2. 生产环境使用强加密算法,如PBEWITHHMACSHA512ANDAES_256,避开旧版PBEWithMD5AndDES;
    3. 统一加解密路径,尤其在配合Druid连接池时,敏感属性统一放置在标准spring.datasource.password中,规避自定义路径无法解密的问题;
    4. 不同环境使用不同密钥,避免因开发密钥泄露波及生产数据;
    5. 结合CI/CD自动化部署时,确保构建脚本不输出密钥值到日志中;
    6. 定期轮换密钥,降低长期使用单一密钥带来的暴露风险;
    7. 版本兼容性先行:Spring Boot 3.x用户选择jasypt-spring-boot-starter 3.0.5+版本,并确保算法配置适配。

    通过以上系统化的配置和密钥管理,即可在Spring Boot项目中实现“配置文件零明文”的安全目标,让数据库密码等敏感信息真正穿上“防弹衣”。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。