jasypt与Spring结合使用解决配置文件中数据库密码加密问题

简介: jasypt与Spring结合使用解决配置文件中数据库密码加密问题

引言


最近公司给银行做了一个项目,在进行本地化部署的时候,银行的科技部门对我们的源码进行了安全扫描,在检测报告中有这么一个问题,要求我们的数据库密码不能以明文的 形式出现在配置文件中,所以小编需要解决这个问题,但是第一个想法就是,自己重写一个配置文件加载的那个方法,这样我们就可以在拿到密文以后,首先解密然后在使用。


但是查询了一些资料以后发现,这个问题已经有成熟的解决方案了,就是利用jasypt与spring结合轻松解决这个问题。


1、首先在项目中pom.xml文件中加入jasypt相关依赖包

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
<version>1.9.2</version>


2、在spring的xml文件中增加配置


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--基于环境变量,配置加密机-->
    <bean id="environmentVariablesConfiguration"
          class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
        <property name="algorithm" value="PBEWithMD5AndDES"/>
        <property name="password" value="xxxxx"/>
    </bean>
    <!--配置加密器,将用于解密-->
    <bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
        <property name="config" ref="environmentVariablesConfiguration"/>
    </bean>
    <!-- 配置文件 -->
    <bean id="placeholderConfig"
          class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="configurationEncryptor"/>
        <property name="locations">
            <list>
                <value>classpath*:properties/*.properties</value>
            </list>
        </property>
    </bean>
    <context:annotation-config/>
    <aop:aspectj-autoproxy/>
    <context:component-scan base-package="com.jack.common.junit"/>
    <context:component-scan base-package="com.jack.common.db"/>
    <context:component-scan base-package="com.jack.common.redis"/>
    <context:component-scan base-package="com.jack.common.task"/>
    <context:component-scan base-package="com.jack.common.jcs"/>
    <context:component-scan base-package="com.jack.common.utils"/>
    <context:component-scan base-package="com.jack.xx.*.service"/>
</beans>

在上面的xml文件中需要我们注意的是,增加了两个节点  配置加密机和解密机, 修个另一节点,就是我们加载.properties文件的节点,不再使用spring的加载器了,而是采用了org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer这个加载器。


其中配置加密节点中的两个属性  algorithm 指定了我们在加密的时候采用的加密算法 passwor  指定了我们在加密的时候的秘钥。


3、配置propertis文件


db.bid.url.W=jdbc:mysql://127.0.0.1:3301/xxxx?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useSSL=false
db.bid.username.R1=root
db.bid.password.R1=ENC(82BfssmmyW8c7RjX/p/mev1h6Tlja/0V)


这样我们在配置 文件中就可以采用密文的方式进行配置,这里值得注意的是 ENC(密文)这是jasypt规定的写法。下面会介绍怎么生成密文。


4、生成密文


通过 在pom文件中配置jasypt的jar包引用,我们已经将该jar包下载到我们本地了,我们将该jar包复制到其他的一个路径下面。 通过cmd命令行,进入到这个路径然后执行下面 命令获得密文。


加密:

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="xxxxxx" password=MINSHENGBANK algorithm=PBEWithMD5AndDES

解密:

解密:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="2D3Bdy/ezCDJY+P6gl9uGEyAeAT3ytpR" password=ZHONGYUANBANK algorithm=PBEWithMD5AndDES


nput:你需要加密的明文字符串

  password:加密秘钥  要和上面的配置一致

  algorithm:加密算法  要和上面的配置一致


加密算法(PBEWITHHMACSHA1ANDAES_128, PBEWITHHMACSHA1ANDAES_256, PBEWITHHMACSHA224ANDAES_128, PBEWITHHMACSHA224ANDAES_256, PBEWITHHMACSHA256ANDAES_128, PBEWITHHMACSHA256ANDAES_256, PBEWITHHMACSHA384ANDAES_128, PBEWITHHMACSHA384ANDAES_256, PBEWITHHMACSHA512ANDAES_128, PBEWITHHMACSHA512ANDAES_256, PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_128, PBEWITHSHA1ANDRC2_40, PBEWITHSHA1ANDRC4_128, PBEWITHSHA1ANDRC4_40)选一种自己喜欢的吧,我这里选了PBEWithMD5AndDES

20190814111055238.png


理论上看到这里 就可以实现我么的需求了,但是关于秘钥的配置我们还是需要强调一下他的安全性。下面介绍一下口令的三种配置方式。


1.配置本地环境变量的方式 这种方式比较安全

<!-- 基于环境变量,配置加密机 -->
<bean id="environmentVariablesConfiguration"
    class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES" />
    <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>

passwordEnvName的值直接设置为环境变量,比如value="APP_ENCRYPTION_PASSWORD", APP_ENCRYPTION_PASSWORD则是系统环境变量,具体使用步骤如:配置环境变量APP_ENCRYPTION_PASSWORD--> 启动应用程序 --> 应用程序启动完成  --> 删除环境变量APP_ENCRYPTION_PASSWORD(window和Linux配置不一样,建议搜索一下怎么配,比较简单,这里就不多说了)

20190814112011431.png

2.直接配置方式


<!-- 基于环境变量,配置加密机 -->
<bean id="environmentVariablesConfiguration"
    class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES" />
    <property name="password" value="haha" />
</bean>

3.properties文件方式

<!-- 基于环境变量,配置加密机 -->
<bean id="environmentVariablesConfiguration"
    class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
    <property name="algorithm" value="PBEWithMD5AndDES" />
    <property name="passwordSysPropertyName" value="${kouling.haha}" />
</bean>


大家根据自己的需求选择一种方式进行配置即可。如果各位读者采用的是springboot的框架,那么配置就更加简单了。

目录
相关文章
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
9月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1491 10
|
8月前
|
存储 弹性计算 安全
现有数据库系统中应用加密技术的不同之处
本文介绍了数据库加密技术的种类及其在不同应用场景下的安全防护能力,包括云盘加密、透明数据加密(TDE)和选择列加密。分析了数据库面临的安全威胁,如管理员攻击、网络监听、绕过数据库访问等,并通过能力矩阵对比了各类加密技术的安全防护范围、加密粒度、业务影响及性能损耗。帮助用户根据安全需求、业务改造成本和性能要求,选择合适的加密方案,保障数据存储与传输安全。
|
11月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
813 3
Jasypt加密数据库配置信息
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
2317 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
Linux 数据库 数据安全/隐私保护
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
529 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
8月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
537 158
|
8月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1424 152