文档章节

Jasypt : 整合spring boot加密应用配置文件敏感信息

冷冷gg
 冷冷gg
发布于 2017/12/11 09:37
字数 602
阅读 1173
收藏 45

背景

  1. 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式:
  • 可以在配置文件my.properties中指定config.decrypt=true
  • 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
  • 也可以在jvm启动参数中指定-Ddruid.config.decrypt=true
    但是HikariCP 默认没有提供实现数据源加解密的方法
  1. 应用中会存在多个需要配置敏感信息(比如stfp等),都需要加密,类似于druid加解密方式依赖于工具类的实现,没有统一的加解密标准,麻烦、而且不好维护。

Spring Cloud Config 的解决方案

  1. Config Server 加解密依赖JDK的JCE。 JDK8的下载地址

  2. 配置config serve encrypt.key=foo

  3. 使用config server 提供的加解密接口生成密文

curl localhost:4001/encrypt -d lengleng
密文

  1. 配置文件使用密文
spring:
  datasource:
    password: '{ciper}密文'

xxx: '{ciper}密文'    
    
  1. 其他的非对称加密等高级配置,参考官方文档。注意一个bug (No key was installed for encryption service

jasypt 的解决方案

  1. Maven依赖
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>1.16</version>
</dependency>
  1. 配置
jasypt:
  encryptor:
    password: foo #根密码
  1. 调用JAVA API 生成密文
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = PigAdminApplication.class)
public class PigAdminApplicationTest {
	@Autowired
	private StringEncryptor stringEncryptor;

	@Test
	public void testEnvironmentProperties() {
		System.out.println(stringEncryptor.encrypt("lengleng"));
	}

}

  1. 配置文件中使用密文
spring:
  datasource:
    password: ENC(密文)

xxx: ENC(密文)
  1. 其他非对称等高级配置参考

总结

  1. Spring Cloud Config 提供了统一的加解密方式,方便使用,但是如果应用配置没有走配置中心,那么加解密过滤是无效的;依赖JCE 对于低版本spring cloud的兼容性不好。
  2. jasypt 功能更为强大,支持的加密方式更多,但是如果多个微服务,需要每个服务模块引入依赖配置,较为麻烦;但是功能强大 、灵活。
  3. 个人选择 jasypt
  4. 源码参考: 基于Spring Cloud、JWT 的微服务权限系统设计

© 著作权归作者所有

共有 人打赏支持
冷冷gg
粉丝 432
博文 113
码字总数 52275
作品 1
潍坊
UI设计师
私信 提问
加载中

评论(10)

YooLin1c
YooLin1c
jce 下载不下来😂
冷冷gg
冷冷gg

引用来自“Blackshao”的评论

引用来自“HuiGe_sd”的评论

自己写个加密类都可以,不一定用插件

引用来自“冷冷gg”的评论

怎么写?
我最近的需求就是datasource 配置文件加密,就是手写的类继承placeholder那个类,其实有很多方法。自己对数据池加密也可以的

回复@Blackshao : 你没有好好读文章,需求是对配置文件里面所有的敏感信息加密,而不是针对数据源
Blackshao
Blackshao

引用来自“HuiGe_sd”的评论

自己写个加密类都可以,不一定用插件

引用来自“冷冷gg”的评论

怎么写?
我最近的需求就是datasource 配置文件加密,就是手写的类继承placeholder那个类,其实有很多方法。自己对数据池加密也可以的
冷冷gg
冷冷gg

引用来自“HuiGe_sd”的评论

自己写个加密类都可以,不一定用插件
怎么写?
冷冷gg
冷冷gg

引用来自“java9”的评论

加密之后是如何做到解密的呢
依赖 jasypt-spring-boot-starter 会自动在spring 容器加载时候解密,注意你的加密方法 要和容器的encoder 方法一直,可以看 我的代码里面 那个 单元测试类
java9
java9
加密之后是如何做到解密的呢
java9
java9
mark
我怀疑这个世界是假的
我怀疑这个世界是假的
快!!!
HuiGe_sd
HuiGe_sd
自己写个加密类都可以,不一定用插件
rockingMan
rockingMan
mark
Jasypt Spring Boot 2.1.0,Spring Boot 项目属性源加密

Jasypt Spring Boot 2.1.0 已发布。Jasypt Spring Boot 为 Spring Boot 项目中的属性源(property sources)提供加密支持。 有三种方法可以在项目中集成 jasypt-spring-boot: 如果 Spring Boo...

淡漠悠然
07/20
1K
5
使用ulisesbocchio对spring-boot项目properties配置文件信息加密

Spring-boot项目中properties文件中的密码明文不太安全, 所以想到给明文加密。了解了一下,有一个依赖工具可以实现这个功能。Ulisesbocchio插件 1.添加maven依赖: <dependency> <groupId>...

李阳-kevin
10/29
0
0
Spring Boot 项目属性源加密 - Jasypt Spring Boot

Jasypt Spring Boot 为 Spring Boot 项目中的属性源(property sources)提供加密支持。 有三种方法可以在项目中集成 jasypt-spring-boot: 如果 Spring Boot 项目中使用了 @SpringBootAppli...

匿名
07/20
0
0
Get史上最优雅的加密方式!没有之一!

原文出处:https://mp.weixin.qq.com/s/gDhsaKg2jXfmUOW6ixTLg 你的配置文件是不是还在使用下面这种落后的配置暴露一些密码: 如果是,那么继续往下看。笔者今天介绍史上最优雅加密接入方式:...

飞哥-Javaer
09/14
0
0
Java加密包--Jasypt

Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。Jasypt开发团队推出...

匿名
2009/06/17
9.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
6
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
5
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部