使用Jasypt对SpringBoot配置文件加密

246 阅读1分钟

场景

目前使用spring-boot进行开发,例如数据库mysql,redis等相关基础服务的密码依然以明文的方式配置在应用服务里面,整个公司的数据安全难以保证,所以需要一个方式解决这个密码暴露的问题

解决方案

在网上搜索,最终发现果然有三方提供的加密算法的工具类Jar(Jasypt),项目地址在github

使用方法如下

以spring-boot项目为例

  • 第一步引入相关的依赖
<dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>3.0.2</version>
</dependency>
  • 第二步下载对应的jaypt的jar包

    Maven下载地址

  • 第三步 运行如下命令对敏感数据进行加密

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=bq71wIW5Lpzqqm3Y algorithm=PBEWithMD5AndDES input=root

其中参数

参数值 含义
password 加密的salt
algorithm 加密使用的算法
input 要加密的字段

输出结果如下:

    ----ENVIRONMENT-----------------
    
    Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.111-b14
    
    
    
    ----ARGUMENTS-------------------
    
    input: root
    algorithm: PBEWithMD5AndDES
    password: bq71wIW5Lpzqqm3Y
    
    
    
    ----OUTPUT----------------------
    
    yrRYydkan5GPHrUP5oNDzA==
    

-OUTPUT-下的输出,即为加密后的字符串

  • 第四步 配置properties或者yaml文件,将生成的加密串配置ENC(加密串)到application.properties或者applicaition.yml中
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      auto-commit: true
      connection-test-query: SELECT 1
      connection-timeout: 30000
      idle-timeout: 30000
      max-lifetime: 1800000
      maximum-pool-size: 15
      minimum-idle: 5
      pool-name: DatebookHikariCP
    password: ENC(zStr9GBzu706rMHZJIEm6rbMSzQLHqTk)
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://127.0.0.1:3306/dive?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
    username: ENC(yrRYydkan5GPHrUP5oNDzA==)
  • 第五步 启动项目时,添加命令参数,将上面加密时用的salt作为参数
java -jar -Djasypt.encryptor.password=bq71wIW5Lpzqqm3Y xxx.jar