SpringBoot | 第三十七章:集成Jasypt实现配置项加密

SpringBoot | 第三十七章:集成Jasypt实现配置项加密前言近期在进行项目安全方面评审时,质量管理部门有提出需要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题。想想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,导致了相应的数据泄露问题。也确实,大部分项目无论开发、测试还是生产环境,相关的敏高信息都是明文存储的,也是一大安全隐患呀。所以今天来说说,如何对配置文件进行加密操作。一点知识何为Jasypt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言

近期在进行项目安全方面评审时,质量管理部门有提出需要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题。想想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,导致了相应的数据泄露问题。也确实,大部分项目无论开发、测试还是生产环境,相关的敏高信息都是明文存储的,也是一大安全隐患呀。所以今天来说说,如何对配置文件进行加密操作。

一点知识

何为Jasypt

Jasypt是一个Java库,允许开发人员以很简单的方式添加基本加密功能,而无需深入研究加密原理。利用它可以实现高安全性的,基于标准的加密技术,无论是单向和双向加密。加密密码,文本,数字,二进制文件。

  1. 高安全性的,基于标准的加密技术,无论是单向和双向加密。加密密码,文本,数字,二进制文件…
  2. 集成Hibernate的。
  3. 可集成到Spring应用程序中,与Spring Security集成。
  4. 集成的能力,用于加密的应用程序(即数据源)的配置。
  5. 特定功能的高性能加密的multi-processor/multi-core系统。
  6. 与任何JCE提供者使用开放的API

官网:http://www.jasypt.org/

SpringBoot集成Jasypt

SpringBoot中集成Jasypt,可直接使用开源的jasypt-spring-boot直接集成,使用简单方便。

mark

常规集成示例

0.引入pom依赖

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

1.设置盐值和修改相应需要加密的配置参数

# 需要解密的地方,使用ENC()进行包裹处理
okong.name=ENC(Xj7Ykn2O0Hni/tN4oojPfw==)

# 设置盐值,生产环境中,切记不要直接进行设置,可通过环境变量、命令行等形式进行设置。
jasypt.encryptor.password=lqdev

简单来说,就是在需要加密的值使用ENC()进行包裹,即:ENC(密文)。若想避免参数冲突,可修改前缀和后缀,可以直接使用jasypt.encryptor.property.prefixjasypt.encryptor.property.suffix进行修改即可。

之后想往常一样使用@Value("${}")即可。

包含xml引入时

在一些使用javaBean配置和xml两种混合模式时,使用第一种配置时,xml参数并未替换。此时看了官方文档,可以使用另一方式进行配置即可。

官方说明

0.引入pom依赖

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

其实就是不进行自动配置而已。

1.启动类启动方式修改。

@SpringBootApplication
@Slf4j
public class JasyptApplication { 
   
	
	public static void main(String[] args) throws Exception { 
   

// SpringApplication.run(JasyptApplication.class, args);
		//使用自定义环境变量 实现一些特殊场景下的加密字符解密操作
		//若无额外的xml引入文件需要解密时,可直接使用SpringApplication.run(JasyptApplication.class, args);即可
		//若想在引入的xml中使用,需要加入环境变量,如以下模式
		new SpringApplicationBuilder().environment(new StandardEncryptableEnvironment())
		.sources(JasyptApplication.class).run(args);
		log.info("spring-boot-jasypt-chapter37服务启动!");
	}
}

其他配置项

Key Required Default Value
jasypt.encryptor.password True 盐值,根密码
jasypt.encryptor.algorithm False PBEWithMD5AndDES
jasypt.encryptor.keyObtentionIterations False 1000
jasypt.encryptor.poolSize False 1
jasypt.encryptor.providerName False SunJCE
jasypt.encryptor.providerClassName False null
jasypt.encryptor.saltGeneratorClassname False org.jasypt.salt.RandomSaltGenerator
jasypt.encryptor.ivGeneratorClassname False org.jasypt.salt.NoOpIVGenerator
jasypt.encryptor.stringOutputType False base64
jasypt.encryptor.proxyPropertySources False false

运维说明

为了方便运维人员对各类敏感密钥进行加密操作,提供了自动化脚本,方便生成相应的加密串。

密钥(盐值)存储说明

本身加解密过程都是通过盐值进行处理的,所以正常情况下盐值加密串是分开存储的。盐值应该放在系统属性命令行或是环境变量来使用,而不是放在配置文件。

命令行示例

java -jar xxx.jar --jasypt.encryptor.password=xxx &

环境变量示例

设置环境变量:

# 打开/etc/profile文件
vim /etc/profile
# 文件末尾插入
export JASYPT_PASSWORD = xxxx

启动命令:

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

bat脚本

为了方便,简单编写了一个bat脚本方便使用。

 @echo off
 set/p input=待加密的明文字符串:
 set/p password=加密密钥(盐值)echo 加密中......
 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI  input=%input% password=%password% algorithm=PBEWithMD5AndDES
 pause

注意:jasypt-1.9.2.jar 文件需要和bat脚本放在相同目录下。此包可直接在示例项目中直接下载。

使用示例:

注意:相应加密串,每次加密的结果是不同的。

使用示例

参考资料

  1. https://github.com/ulisesbocchio/jasypt-spring-boot

  2. http://www.jasypt.org/

总结

本章节主要简单介绍了如何使用jasypt对配置文件进行加密操作。一些其他高级应用,可以查看官方文档进行相关集成即可。集成起来相对来说比较简单,注意是要对密码(盐值)的管理,需要进行安全把控下,建议运维人员针对每个项目进行不一样的盐值操作,避免一个项目泄露了,造成其他关联项的信息泄露。安全无大小呀,还是谨慎为妙!

最后

目前互联网上很多大佬都有SpringBoot系列教程,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。

老生常谈

  • 个人QQ:499452441
  • 微信公众号:lqdevOps

公众号

个人博客:http://blog.lqdev.cn

完整示例:https://github.com/xie19900123/spring-boot-learning/tree/master/chapter-37

原文地址:https://blog.lqdev.cn/2019/05/08/springboot/chapter-thirty-seven/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189423.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Filter体现职责链模式

    Filter体现职责链模式

    2021年12月6日
    39
  • python pip升级命令

    python pip升级命令因为pip升级不常用到,所以经常不记得,趁现在记录一下pipinstall–upgradepip

    2022年6月9日
    39
  • stm32基础知识必会_护理学基础必考知识点

    stm32基础知识必会_护理学基础必考知识点目录【GPIO外设】一、GPIO的八种工作模式二、总结在STM32中选用IO模式【RCC时钟】【NVIC是嵌套向量中断控制器】一、优先级定义二、优先级分组【EXTI外部中断/事件控制器】【SysTick系统定时器】【通讯的基本概念】一、串行通讯与并行通讯二、全双工、半双工及单工通讯三、同步通讯与异步通讯四、通讯速率【串口通讯】一、物理层:二、协议层【I2C】一、物理层二、协议层【SPI】一、SPI物理层二、协议…

    2022年9月6日
    3
  • 大数据技术的发展趋势

    大数据技术的发展趋势英国牛津大学教授维克托·迈尔-舍恩伯格在其所撰写的《大数据时代》中表述,大数据时代是“已经发生的未来”,而在这个已经发生的未来里,没有旁观者。作为时代发生的必然产物,大数据正加速渗透至我们的日常生活,正完成对各传统领域的颠覆。本文从大数据时代的特点出发,为读者介绍目前的大数据技术的发展趋势以及大数据的生态体系。大数据时代的特点和市场规模大数据时代两个特点。第一,大数据技术以开源为主,迄今为止,尚未形成绝对技术垄断,即便是IBM、甲骨文等行业巨擘,也同样是集成了开源技术和该公司已有产品而已。开源技

    2022年5月12日
    44
  • 【原创】记录昨天Oschina上个人博客无法访问的问题

    【原创】记录昨天Oschina上个人博客无法访问的问题

    2021年9月14日
    87
  • EXCUTE方法executeUpdate「建议收藏」

    EXCUTE方法executeUpdate「建议收藏」“Execute”是JAVA语言的一种,作用是执行动态的SQL语句或非运行时创建的PL/SQL块,动态创建和执行SQL语句。Execute语句的方法1方法executeQuery用于产生单个结果集的语句,例如SELECT语句。被使用最多的执行SQL语句的方法是executeQuery。这个方法被用来执行SELECT语句,它几乎是使用最多的SQL语句。2方法executeUp…

    2022年10月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号