SpringBoot_加密配置中的敏感信息

davidwang456 阅读:60 2022-07-29 11:53:02 评论:0

数据用户名和数据库密码加密为例

我们将使用https://github.com/ulisesbocchio/jasypt-spring-boot这个开源项目提供的实现和插件,来帮助我们轻松的完成配置信息的加密。

1、引入包

pom.xml中引入jasypt提供的Spring Boot Starter

<dependency> 
    <groupId>com.github.ulisesbocchio</groupId> 
    <artifactId>jasypt-spring-boot-starter</artifactId> 
    <version>3.0.3</version> 
</dependency>

2、配置加/解的密码

在配置文件 application.yml 中加入加密需要使用的密码,如:

# jasypt加密的密匙 
jasypt: 
  encryptor: 
    password: ABCDEFGHIJK

3、测试用例中生成加密后的秘钥

     @Test 
     void getEncrypt() { 
         //对敏感信息进行加密 
         String url = encrypt.encrypt("jdbc:mysql://localhost:3306/demo"); 
         String name = encrypt.encrypt("root"); 
         String password = encrypt.encrypt("123456"); 
         System.out.println(url+"----------------"); 
         System.out.println(name+"----------------"); 
         System.out.println(password+"----------------"); 
     }

结果:

jJW8vLCvy1NJc7Z37+MHY++2IxbAIU3F2PKywvVPgleSb+Y6VtLgQwrsI4YnOPkGg2+EPRWuhTftpv2iY4ck7mxTnXodNmMHarAS2Dvyp3c=---------------- 
rYXxJV6dq1R5Nlbgf+oKnVHORjarrzc3YkANKwJvUhbDz+MLs1TZwTZm/yr9aQdM---------------- 
w0/NoJF2XzxkDqRlGWgmslXcpTlVNQfqv+ylCFAae5SthDbpSsaMqickUsib0h0m----------------

4、将加密后的字符串替换原明文

# jasypt加密的密匙 
jasypt: 
  encryptor: 
    password: ABCDEFGHIJK 
 ​ 
mysql: 
  url: ENC(FJqflLlLzTa2t8MvOUh5R6wGp8xgt1c7jbqm/AawsRSJvwySrN03P0CiVYT3a9kUEQqeQ7ly4ZDEGssAISUM9bZ/8KQZgo2SOEj/S05aBaI=) 
  username: ENC(/v+5Q5u4oOCSyps9RdPhL/xlghEoXSL0uptr1npRoC9I3egOuWjYTJexkGGGgwp+) 
  password: ENC(Hsqq32hosJvUKjA25e1hNq7TfkU+YiLNOYXzn6XWK51oE4LUWAeGcfSCh2Z/poz2) 
 

注意: ENC()DEC()一样都是 jasypt 提供的标识,分别用来标识括号内的是加密后的内容和待加密的内容。


5、测试

javaBean:

@Data 
@Component 
@ConfigurationProperties(prefix = "mysql") 
public class Mysql { 
    private String url; 
    private String username; 
    private String password; 
}

测试:

    @Autowired 
    private Mysql mysql; 
 
    @Test 
    void test() { 
        System.out.println("mysql = " + mysql); 
    }

结果:

mysql = Mysql(url=jdbc:mysql://localhost:3306/demo, username=root, password=123456)

在springboot项目加载的时候就会将加密信息进行解密,就获得了我们之前的username和password了。


6、思考

根据上面的步骤,爱思考的你,也许会发现这样的问题:虽然敏感信息是加密了,但是我们通过配置文件也能看到jasypt.encryptor.password信息,我们是不是通过利用这个再把原始信息解密出来,这样的话岂不是还是不安全?

上面的实现方式的确是会有这样的问题!所以,在实际应用的过程中,jasypt.encryptor.password的配置,可以通过运维小伙伴在环境变量或启动参数中注入,而不是由开发人员在配置文件中指定。

 

部署时配置salt(盐)值

  1. 为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值:

    java -jar xxx.jar  -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW
  2. 或者在服务器的环境变量里配置,进一步提高安全性,打开/etc/profile文件

    vim /etc/profile

    profile 文件末尾插入salt(盐)变量

    export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

    编译,使配置文件生效

    source /etc/profile

    运行

    java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar

本文参考链接:https://www.cnblogs.com/mmdz/p/15428613.html
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

一个IT知识分享的公众号