当前位置:   article > 正文

SpringBoot使用jasypt加密配置文件

jasypt

目录

前言

引入maven依赖

生成加密串

配置文件

配置salt(盐)值

通过idea设置盐值参数

Mave打包和部署

系统环境变量设置盐值

服务器配置文件


前言

配置文件对一个系统来说是重中之重,我们常用的数据库连接基本上都是在配置文件里的,还有其他的公私钥,秘钥等等,所以保护好配置文件的信息安全相当重要,特别是那些对数据安全性很高的企业,一旦配置文件信息泄露,那将会带来不可估量的后果。如何解决这类问题呢,所以我们使用jasypt对其重要信息进行加密,这样的话就算有心人得到配置文件的信息,也无法解密。

引入maven依赖

  1. <!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
  2. <dependency>
  3. <groupId>com.github.ulisesbocchio</groupId>
  4. <artifactId>jasypt-spring-boot-starter</artifactId>
  5. <version>3.0.3</version>
  6. </dependency>

生成加密串

  1. @SpringBootTest
  2. public class TestEncryptorTest {
  3. @Test
  4. public void test() {
  5. StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
  6. encryptor.setPassword("123456");//yml文件里设置的key
  7. String urlEn = encryptor.encrypt("jdbc:mysql://localhost:3306/mscloud?useUnicode=true&characterEncoding=utf-8&useSSL=false");
  8. String nameEn = encryptor.encrypt("root");
  9. String passwordEn = encryptor.encrypt("root");
  10. String urlDe = encryptor.decrypt(urlEn);
  11. String nameDe = encryptor.decrypt(nameEn);
  12. String passwordDe = encryptor.decrypt(passwordEn);
  13. System.out.println("url密文:"+urlEn);
  14. System.out.println("url明文:"+urlDe);
  15. System.out.println("username密文:"+nameEn);
  16. System.out.println("username明文:"+nameDe);
  17. System.out.println("password密文:"+passwordEn);
  18. System.out.println("password明文:"+passwordDe);
  19. }
  20. }

打印的内容如下,复制加密后的密文,后边会用到,每次生成的密文都是不一样的,不过不影响使用。

  1. url密文:6GuPV/TtAOmPlFsdRAYTCy4ixiaqetdHv77UrqYcODnCY5IdchAbrlzc/DAGpdL4/BOkRxEvM925nO1MNQMV751Jlcjm/NOnIP2WUs/2CIneUM/kDa1cD3tbcoFe2vNWaecT/E+nztuXFeKe9r6v2R7d8j41iBIR
  2. url明文:jdbc:mysql://localhost:3306/mscloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
  3. username密文:UiMbl3d8dLKZUIMp8HMOZ7r6lfsQb0vljQvhEPTqRa8=
  4. username明文:root
  5. password密文:NTY6g1rSpvYXVtpt1+SOJIWy9XuIsV/7vPP8TTswJe8=
  6. password明文:root

配置文件

新建application.yml文件,将生成的加密串使用ENC标识进行使用,如ENC(加密串)。password: ${ENCRYPT:123456} 这样写的话,假设你再环境变量配置了ENCRYPT或者在当前yml配置了这个变量,就会取这个环境变量的值,如果没找到这个变量值,就会用冒号后边的默认值。

  1. #jasypt:
  2. # encryptor:
  3. # password: ${ENCRYPT:123456} #jasypt加密的盐值,
  4. spring:
  5. application:
  6. name: cloud-payment-service
  7. datasource:
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. url: ENC(6GuPV/TtAOmPlFsdRAYTCy4ixiaqetdHv77UrqYcODnCY5IdchAbrlzc/DAGpdL4/BOkRxEvM925nO1MNQMV751Jlcjm/NOnIP2WUs/2CIneUM/kDa1cD3tbcoFe2vNWaecT/E+nztuXFeKe9r6v2R7d8j41iBIR)
  10. username: ENC(UiMbl3d8dLKZUIMp8HMOZ7r6lfsQb0vljQvhEPTqRa8=)
  11. password: ENC(NTY6g1rSpvYXVtpt1+SOJIWy9XuIsV/7vPP8TTswJe8=)

配置salt(盐)值

我们在生成加密串的时候设置了盐值为123456,如下图所示。

配置文件如果不知道盐值,它自己也解不了密啊,所以我们可以再配置文件配置,这样的话虽然解决问题了,但是我都知道你盐值了,我难道还解不出你的密文吗?所以这样做不安全,但如果是随便玩玩,偷偷懒的话,也可以这样放着,看着感觉安全O(∩_∩)O。。

  1. jasypt:
  2. encryptor:
  3. password: ${ENCRYPT:123456} #jasypt加密的盐值,

因此我们还有其他方案来解决这个问题。

通过idea设置盐值参数

点击右侧的加号,添加jasypt.encryptor.password,这样本地能正常启动,但是打包呢,往服务器上部署呢?

Mave打包和部署

指定某个项目设置打包参数或者全局设置

部署启动,启动jar包是传入

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

Windows系统环境变量设置盐值

可以通过系统环境变量设置盐值,在项目启动的时候先获取环境变量,然后传入对应的位置即可。假设我在系统环境变量配置了ENCRYPT=123456,只需在配置文件使用${ENCRYPT}即可获取到。不过再启动的时候一定要确保设置了该系统变量,不然肯定起不来哦。

  1. jasypt:
  2. encryptor:
  3. password: ${ENCRYPT}
  4. # password: ${ENCRYPT:123456} #如果环境变量里没找到,则取冒号后边的默认值

Linux 系统环境变量配置

打开/etc/profile文件

vim /etc/profile

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

export ENCRYPT=123456

编译,使配置文件生效

source /etc/profile

 运行

java -jar -Djasypt.encryptor.password=${ENCRYPT} test.jar

服务器配置文件

还有一种就是放到服务器上的某个位置,启动的时候加载该文件获取信息。

SpringBoot3 配置如下

  1. package vip.aster.admin.config;
  2. import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
  5. import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. /**
  10. * @author jin
  11. * @date 2024/2/5
  12. * @Note
  13. */
  14. @Configuration
  15. @EnableEncryptableProperties
  16. @Slf4j
  17. public class JasyptConfig {
  18. @Value("${jasypt.encryptor.password}")
  19. private String encryptorPass;
  20. /**
  21. * 配置StandardPBEStringEncryptor加解密器的配置
  22. * @return
  23. */
  24. @Bean
  25. public EnvironmentStringPBEConfig environmentStringPBEConfig() {
  26. log.info("encryptorPass:"+encryptorPass);
  27. EnvironmentStringPBEConfig environmentStringPBEConfig = new EnvironmentStringPBEConfig();
  28. //设置算法
  29. environmentStringPBEConfig.setAlgorithm("PBEWithMD5AndDES");
  30. environmentStringPBEConfig.setPassword(encryptorPass);
  31. return environmentStringPBEConfig;
  32. }
  33. /**
  34. * 配置StandardPBEStringEncryptor加解密器
  35. * @return
  36. */
  37. @Bean("jasyptStringEncryptor")
  38. public StandardPBEStringEncryptor standardPBEStringEncryptor() {
  39. StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
  40. standardPBEStringEncryptor.setConfig(environmentStringPBEConfig());
  41. return standardPBEStringEncryptor;
  42. }
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/945667
推荐阅读
  

闽ICP备14008679号