Springboot使用jasypt加密配置文件

使用背景:

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

使用技术:jasypt

具体实现:

1、项目中引入jasypt相关jar

       <!--数据库加密工具引用jar-->
		<dependency>
			<groupId>com.github.ulisesbocchio</groupId>
			<artifactId>jasypt-spring-boot-starter</artifactId>
			<version>2.1.0</version>
		</dependency>
		<dependency>
			<groupId>org.jasypt</groupId>
			<artifactId>jasypt</artifactId>
			<version>1.9.3</version>
		</dependency>

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

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。

在实际开发中,本地调试可以将密钥配置在这里,依次在IDEA中点击Run-->Edit Configurations-->

在Override parameters 下面的key输入jasypt.encryptor.password,Value则输入自己的密钥,保存。这样在配置文件中就不需要写密钥了。

 

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值