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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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的框架,那么配置就更加简单了。

目录
相关文章
|
1月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
10天前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
27 5
|
13天前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
27 2
|
1月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
79 0
|
1月前
|
数据库 数据安全/隐私保护
远程桌面CredSSP 加密数据库修正
远程桌面CredSSP 加密数据库修正
22 0
|
4天前
|
SQL 安全 算法
网络安全的盾牌与矛:加密技术与安全意识的双重防线
【9月更文挑战第16天】在数字世界的海洋中,网络安全的灯塔照亮着信息流通的每一个角落。本文将深入探讨网络安全的核心——加密技术,以及构筑坚不可摧防线的另一块基石——安全意识。我们将从密码学的基础知识出发,逐步揭开加密技术的神秘面纱,并分析当前最常见的网络攻击手段,揭示安全意识的重要性。通过理论与实践的结合,旨在为读者提供一套实用的网络安全知识体系,以应对日益复杂的网络威胁。
|
2天前
|
存储 安全 网络安全
网络安全与信息安全:构建安全防线的多维策略在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的关键要素。本文旨在探讨网络安全漏洞的本质、加密技术的重要性以及提升公众安全意识的必要性,以期为构建更加坚固的网络环境提供参考。
本文聚焦于网络安全领域的核心议题,包括网络安全漏洞的现状与应对、加密技术的发展与应用,以及安全意识的培养与实践。通过分析真实案例,揭示网络安全威胁的多样性与复杂性,强调综合防护策略的重要性。不同于传统摘要,本文将直接深入核心内容,以简洁明了的方式概述各章节要点,旨在迅速吸引读者兴趣,引导其进一步探索全文。
|
2天前
|
SQL 安全 算法
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第18天】随着互联网的发展,网络安全问题日益严重。本文将从网络安全漏洞、加密技术、安全意识等方面进行知识分享,帮助读者了解网络安全的重要性和应对策略。通过本文,您将了解到如何保护自己的网络安全,提高安全意识,防范网络攻击。
|
2天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【9月更文挑战第18天】在当今数字化时代,网络安全与信息安全已成为我们生活中不可或缺的一部分。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的内容,以帮助读者更好地了解和保护自己的网络安全。我们将通过实例分析,深入探讨网络安全的重要性,并提供一些实用的技巧和建议。
|
3天前
|
监控 安全 网络安全
网络安全的盾与剑:漏洞防御与加密技术解析
【9月更文挑战第17天】在数字时代的浪潮中,网络安全成为保护数据和隐私的关键防线。本文深入浅出地探讨了网络安全的两大支柱:漏洞防御和加密技术,旨在提升公众的安全意识并分享防护策略。我们将从基础概念出发,逐步深入到技术细节,不仅阐释原理,还提供实际案例分析,帮助读者构建起一道坚固的数字防御墙。
17 3