当前位置:   article > 正文

使用Jasypt保护Spring Boot配置文件中的数据库密码:避免敏感信息泄露_jasypt数据库密码加密

jasypt数据库密码加密

在Spring Boot项目中,配置文件中往往包含数据库的用户名和密码等敏感信息,如果不加保护直接上传到Git仓库并对外网开放,可能会导致严重的安全问题。本文介绍了如何使用Jasypt(Java Simplified Encryption)对这些敏感信息进行加密处理,从而提高项目的安全性。通过引入Jasypt依赖、配置加解密方法、在配置文件中使用加密后的密码,并在项目启动时提供加密密钥,我们可以有效地保护敏感信息。本文还详细讲解了Jasypt的工作原理以及如何在Spring Boot项目中集成和使用这一工具,同时提供了安全管理的建议,确保加密密码和其他敏感信息的安全性。

SpringBoot项目配置文件数据库密码安全上传方案

在Spring Boot项目中,配置文件中往往会包含数据库的用户名和密码等敏感信息。如果不加保护直接上传到Git仓库并对外网开放,后果不堪设想。本文将介绍如何使用Jasypt工具来加密这些敏感信息,从而提高项目的安全性。

Jasypt简介

Jasypt (Java Simplified Encryption) 是一个开源的Java加密工具库,旨在简化加密操作。通过使用Jasypt,我们可以轻松地对配置文件中的敏感信息进行加密和解密。

SpringBoot项目引入Jasypt

首先,在pom.xml中添加Jasypt的依赖:

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

加解密测试

接下来,我们编写一个简单的单元测试来验证Jasypt的加解密功能:

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.junit.jupiter.api.Test;

public class JasyptTest {

    @Test
    public void testEncryptionDecryption() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("123456"); // 加密密码
        config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 加密算法
        config.setKeyObtentionIterations("1000"); // 密钥获取迭代次数
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        
        String originalText = "hello ...";
        String encryptedText = encryptor.encrypt(originalText);
        System.out.println("加密后: " + encryptedText);
        
        String decryptedText = encryptor.decrypt(encryptedText);
        System.out.println("解密后: " + decryptedText);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

运行测试,我们可以看到:

加密后: nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs
解密后: hello ...
  • 1
  • 2

在SpringBoot中使用Jasypt

我们可以在Spring Boot项目中使用Jasypt来加密配置文件中的敏感信息。首先,将配置文件中的明文密码替换为加密后的密码,并使用ENC()包装:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: ENC(nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在启动项目时,需要通过启动参数传递加密密码:

-Djasypt.encryptor.password=123456
  • 1

配置示例

在Spring Boot项目中,可以在application.ymlapplication.properties文件中配置Jasypt:

jasypt:
  encryptor:
    password: ${JASYPT_ENCRYPTOR_PASSWORD}
    algorithm: PBEWITHHMACSHA512ANDAES_256
    key-obtention-iterations: 1000
    pool-size: 1
    provider-name: SunJCE
    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    string-output-type: base64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

并确保在运行时通过环境变量提供加密密码,例如:

export JASYPT_ENCRYPTOR_PASSWORD=123456
  • 1

原理解析

Jasypt在启动时,会扫描配置文件中的属性值,判断是否以ENC(开头并以)结尾。如果是,则提取出其中的密文,并使用提供的加密密码和配置进行解密,将解密后的明文值注入到对应的属性中。在代码中通过如@Value("${spring.datasource.password}")方式获取的将是解密后的明文。

安全注意事项

  1. 密钥管理:加解密密码必须安全存储,建议通过环境变量或专门的密钥管理服务(如AWS KMS、Azure Key Vault等)来管理。
  2. 最小权限原则:确保应用仅拥有所需的最低权限,避免过高的数据库权限。
  3. 代码审计:定期对代码和配置进行审计,确保没有明文密码泄露。

通过以上方法,我们可以有效保护Spring Boot项目中的敏感信息,避免其在Git仓库中被暴露,提高项目的安全性。

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

闽ICP备14008679号