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

使用Jasypt加密SpringBoot项目的application们

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

使用Jasypt加密SpringBoot项目的application们

使用Jasypt加密SpringBoot项目的application们
  • 使用Jasypt加密SpringBoot项目的application们
    • application里有什么
    • 为什么要加密
    • 怎么加密
    • 加密策略

使用Jasypt加密SpringBoot项目的application们

该文章主要从为什么要对SpringBoot的application中的敏感信息加密,到如何使用Jasypt-Spring-Boot项目对application*加密,以及加密策略的建议。记录一下本码农对application加密的一些心得体会。

application里有什么

要知道为什么要对application加密,首先要清楚application有什么。用过SpringBoot的友农肯定明白,里面整个系统的一些配置信息,系统在启动的时候会加载这些配置,诸如数据库的连接信息、redis的配置信息、日志的输出配置等等。这些配置信息有些共同的特点,他们都是全局的(整个系统都用这一份)、静态的(程序跑起来之后旧不会改变了)、环境相关的(不同环境下某些值需要改变)。当然这些东西直接写在程序中也是可以的,但是在更换环境的时候还要改代码,这是我们不愿意看见的,因此这个application的出现必不可少的,而且里面记录了很多密码、密钥等敏感信息。

为什么要加密

如上所述,application中记录这诸如数据库密码、程序密钥等关键信息,这些信息如果因为系统漏洞等原因被黑客得到,损失将无法估量。

怎么加密

本文使用Jasypt-Spring-Boot进行加密,Jasypt-Spring-Boot的使用非常简单。

  1. 引入依赖
    1. 如果你的SpringBoot项目使用了@SpringBootApplication 或 @EnableAutoConfiguration,像以下这样:
      @SpringBootApplication
      public class MyApplication {
          public static void main(String[] args) {
              SpringApplication.run(MyApplication .class, args);
          }
      }
      
      使用以下依赖
      
          com.github.ulisesbocchio
          jasypt-spring-boot-starter
          3.0.4
      
      
    2. 如果不是,则使用下面的依赖
       
           com.github.ulisesbocchio
           jasypt-spring-boot
           3.0.4
       
      
      在程序入口增加注解:
      @Configuration
      @EnableEncryptableProperties
      public class MyApplication {
         
      }
      
  2. 接下来对关键信息进行加密
    1. 将配置文件中需要加密的内容使用以下符号标注上
      spring:
        datasource:
          url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root
          password: DEC(123456) #这里需要将密码123456进行加密,使用DEC()将密码括起来
      
    2. 引入Jasypt插件
      	
      	  
      	    
      	      com.github.ulisesbocchio
      	      jasypt-maven-plugin
      	      3.0.4
      	    
      	  
      	
      
    3. 执行以下命令对 srcmainresourcesapplication.properties 进行加密
      mvn jasypt:encrypt -Djasypt.encryptor.password="the password"
      
    4. 如果配置文件不是application.properties,则使用以下命令指定文件名进行加密
      mvn jasypt:encrypt -Djasypt.plugin.path="file:src/main/resources/application.yml" -Djasypt.encryptor.password="the password"
      
      注:Windows系统下用CMD执行命令会导致整个文件变为GBK编码,使用BASH或者IDEA自带的命令来处理比较靠谱
    5. 这里是加密后的结果,原来的DEC变成了ENC,代表已经加密完成。
      spring:
        datasource:
          url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root
          password: ENC(STxPwhemkd3r5ugshWeRywkH//rGhCq4KjhIMm1xZoc5lW07sO6/nfh684Q4r3kQ)
      
  3. 到这里要准备启动应用了
    1. 既然密码已经被加密了,那么就需要有一个地方告诉程序解密的密钥是什么,因此在application中再增加一个参数,记录加密的密钥
      jasypt:
      	encryptor:
      		password: the password  # 这个地方就不要加密了,这里加密了谁都不知道密码是啥了
      
    2. 这个时候启动应用,会发现程序正常启动了。如果启动失败了那说明配置还有点问题,按照以上步骤重试一遍。
加密策略
  1. 既然怕application文件被黑客窃取到,那么将密钥明文写在application中,那等于没有加密
  2. 这里可以在启动SpringBoot应用的时候将密钥加入到启动命令中如下所示:
    java -jar application.jar --jasypt.encryptor.password=YourPassword
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681524.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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