栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot使用jasypt加密配置文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot使用jasypt加密配置文件

使用背景:

Springboot项目中的配置文件,涉及到像数据库连接,账号,密码,redis连接,第三方接口连接信息是直接暴露出来的,这给我们项目安全带来一定的安全隐患,为了提高我们项目抵御外来风险的冲击,有必要对项目配置中涉及到隐私的部分进行加密处理。

使用技术:jasypt

具体实现:

1、项目中引入jasypt相关jar

       
		
			com.github.ulisesbocchio
			jasypt-spring-boot-starter
			2.1.0
		
		
			org.jasypt
			jasypt
			1.9.3
		

这里插句题外话,网上很多教程说使用以下版本

jasypt-spring-boot-starter 3.0.3

会方便很多,在我这里没发觉,可能跟我的springboot版本有关吧,我的springboot是2.1.1.

jasypt:
  encryptor:
    password: 123456
    algorithm: PBEWithMD5AndDES
    iv-generator-classname: org.jasypt.iv.NoIvGenerator

上面的password为加密的密钥,开发时可写在application.yml里边,打包部署到线上时务必去掉,否则会导致黑客拿到的密钥和密文进行破解,失去咱们使用jasypt的初衷和良好出发点。

2、在单元测试中对数据库url,username,password等敏感属性进行加密:

    @Test
    public void getJasypt(){
        String url=stringEncryptor.encrypt("jdbc:mysql://127.0.0.1:3306/pcyui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8");
        String username=stringEncryptor.encrypt("root");
        String password=stringEncryptor.encrypt("root");
        String redisPassword=stringEncryptor.encrypt("123456");
        String deURL=stringEncryptor.decrypt(url);
        String deUserName=stringEncryptor.decrypt(username);
        String depwd=stringEncryptor.decrypt(password);
        String deRedisP=stringEncryptor.decrypt(redisPassword);
        log.info("加密后url:"+url);
        log.info("加密后username:"+username);
        log.info("加密后password:"+password);
        log.info("加密后redisPassword:"+redisPassword);
        log.info("解密后url:"+deURL);
        log.info("解密后username:"+deUserName);
        log.info("解密后depwd:"+depwd);
        log.info("解密后deRedisP:"+deRedisP);
    }

3、使用生成的密钥替换配置文件中明文,注意加上ENC()

url: ENC(Y8378foffglgs;s/s;spqgfs==)  #这个中间省略很大部分,事实上加密后的密文很长
    driver-class-name: com.mysql.cj.jdbc.Driver  
    username: ENC(KBafrsfaklfdfafg==)
    password: ENC(0gkjfweqlspwesklf=)

4、替换好后,将上面的

jasypt:
  encryptor:
    password:

password中的密钥去掉,然后打包。将密钥放在启动命令中作为参数启动,提高安全性,启动命令参考如下:

java -jar -Djasypt.encryptor.password=123456 Whcal.jar

上面的Whcal.jar为打包好后输出的jar。

这里需要注意的是,如果有多个环境,如开发、测试、生产环境,不同环境的配置,原始的敏感数据需要使用明文,原来加密的,先统一恢复为明文,即未加密的,使用单元测试生成后再整体替换掉原来的明文。笔者就吃过这样的亏,不同环境的相互套用,结果,单元测试都报错,无法生成密文。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/582456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号