Spring Boot使用jasypt处理加密问题
1.背景
现代互联网充斥着各种攻击、病毒、钓鱼、欺诈等手段,层出不穷。对于一个公司而已最基本的财富无非是代码和数据,“配置属性加密”的应用场景假设如果攻击者通过某些手段拿到部分敏感代码或配置,甚至是全部源代码和配置时,我们的基础设施账号依然不被泄漏。当然手段多种多种多样,比如以某台中毒的内网机器为肉机,对其他电脑进行ARP攻击抓去通信数据进行分析,或者获取某个账号直接拿到源代码或者配置,等等诸如此类。
2.思路
- 采用比较安全的对称加密算法;
- 对基础设施账号密码等关键信息进行加密;
- 构建时、运行时传入密钥,在加载属性前进行解密;
- 开发环境可以将密钥放置在代码中,测试、灰度、生产等环境放置在构建脚本或者启动脚本中;
- 如果自动化部署甚至可以有专门的程序来管理这些密钥(目前没有,暂不考虑);
值得思考的问题?
当内网被攻破,当源码泄漏,当zkui被攻破,当开发账号泄漏,当运维账号泄漏,我们如何保证生产环境的基础设施安全,如何防范关键信息泄漏?
3.技术框架
- Jasypt是一个优秀的加密库,支持密码、Digest认证、文本、对象加密,此外密码加密复合RFC2307标准。http://www.jasypt.org/download.html
- ulisesbocchio/jasypt-spring-boot,集成Spring Boot,在程序引导时对属性进行解密。https://github.com/ulisesbocchio/jasypt-spring-boot
4.处理过程
1.添加maven依赖引入jasypt
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>1.8</version>
</dependency>
2.配置加密参数
jasypt:encryptor:#这里可以理解成是加解密的时候使用的密钥password: password
写一个测试方法,这里直接在单元测试里面来实现给密码加密,得到字符串密码
@Autowired
StringEncryptor stringEncryptor;@Test
public void encryptPwd() {String result = stringEncryptor.encrypt("yourpassword");System.out.println("=================="); System.out.println(result); System.out.println("==================");
}
把得到的密文写到需要使用到的地方,加密后的字符串需要放到ENC里面,格式如下:
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=falseusername: rootpassword: ENC(4TyrSSgQd2DCHnXVwkdKMQ==)driver-class-name: com.mysql.jdbc.Driver
5.启动时加载命令模式
通过命令行运行 jasypt-1.9.2.jar 包命令来加密解密:
1. 在jar包所在目录打开命令行,运行如下加密命令:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="root" password=security algorithm=PBEWithMD5AndDES
运行结果如下:
----ENVIRONMENT-----------------Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.91-b14 ----ARGUMENTS-------------------algorithm: PBEWithMD5AndDES
input: root
password: security----OUTPUT----------------------i00VogiiZ1FpZR9McY7XNw==
2. 使用刚才加密出来的结果进行解密,执行如下解密命令:
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="i00VogiiZ1FpZR9McY7XNw==" password=security algorithm=PBEWithMD5AndD
运行结果如下:
----ENVIRONMENT-----------------Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.91-b14 ----ARGUMENTS-------------------algorithm: PBEWithMD5AndDES
input: i00VogiiZ1FpZR9McY7XNw==
password: security----OUTPUT----------------------root
过程中了解到对Spring Boot的支持是最简单的。如果要是 Spring 项目的话,需要做一些xml中的配置,参考:http://blog.csdn.net/gdfsbingfeng/article/details/16886805
最好还要了解一下使用过程是怎么样的,参考这个仓库中的README.md 描述的非常详细。
https://github.com/ulisesbocchio/jasypt-spring-boot
还有 jasypt 的一些介绍:
https://baijiahao.baidu.com/s?id=1575219661412590&wfr=spider&for=pc
Spring Boot使用jasypt处理加密问题相关推荐
- spring boot使用jasypt加密原理解析
目录 版本对应的坑 关键技术点 源码解析 将jar包引入到spring boot中 @EnableAutoConfiguration原理 JasyptSpringBootAutoConfigurati ...
- Spring Boot集成Jasypt安全框架
Jasypt安全框架提供了Spring的集成,主要是实现 PlaceholderConfigurerSupport类或者其子类. 在Sring 3.1之后,则推荐使用PropertySourcesPl ...
- Vue与Spring boot基于RSA非对称加密进行前后端交互
当处理大型的系统项目,或者保密性要求高的项目.是要解除一些加密算法的,非对称加密肯定比对称加密更加安全,但是也更消耗性能.这里就展示一下前端使用Vue,后端使用Spring boot的情况下,进行前后 ...
- 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密
学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密 技术标签: RSA AES RSA AES 混合加密 整合 前言: 为了提高安全性采用了RSA,但 ...
- 对spring boot yml配置文件敏感信息加密处理的两种方式
目录 方式一:手动配置加密处理(手动配置分三种情况) 方式二:spring boot整合Jasypt实现yml配置文件敏感信息加密 yml配置文件敏感信息无非就是数据库密码,redis密码,以及整合的 ...
- Spring Boot 实现配置文件加解密原理
Spring Boot 配置文件加解密原理就这么简单 背景 接上文<失踪人口回归,mybatis-plus 3.3.2 发布>[1] ,提供了一个非常实用的功能 「数据安全保护」 功能,不 ...
- Java工作笔记-Spring boot中配置文件加密(Jasypt的使用)
Jasypt Spring Boot提供了Spring Boot应用程序配置文件的加密.有下面3种方式在项目中集成jasypt-spring-boot: 1. 在classpath中添加jasypt- ...
- maven项目密码md5加密_加密Spring Boot中的application.properties
1 概述 什么?都2020年了还在Spring Boot的配置文件中写明文密码? (虽然是小项目,明文也没人看.) (明文简单快捷方便啊!!! ) (你看直接用户名root密码123456多么简单!! ...
- Spring Boot 配置文件密码加密方法
参考:https://github.com/ulisesbocchio/jasypt-spring-boot Spring Boot 配置文件密码加密两种方案 - ken007 - 博客园 1.引入j ...
最新文章
- 13_文件的操作模式
- node平台截取图片模块——jimp
- 在你的 Rails App 中开启 ETag 加速页面载入同时节省资源
- LeetCode-剑指 Offer 12. 矩阵中的路径
- cinema 4d完全学习手册_PBL 行动者手册 Vol.2(幼儿版)发布,快来领取一本神奇的故事集!...
- 【Python】机器学习绘图神器Matplotlib首秀!
- 伦茨8400变频器面板按键说明_变频器调试笔记
- 液压减振器 matlab,摩托车液压减振器内泄漏对阻尼力影响计算及其对策
- EWSA破解WPA无线密码具体图文教程
- 【Linux 操作系统】vim编辑器配置及常用命令
- 计算机游戏测试软件,你的电脑能不能吃鸡,两款软件很简单就能测试出来
- java bmp透明底色_C++ 设置透明背景图片
- 高分辨率遥感卫星影像在交通方面的应用
- 【NVIDIA】ubuntu桌面版安装nvidia显卡驱动程序
- 微信小程序3天刷量开流量主
- latex出现File ended while scanning use of \frame.错误
- 微信公众号活动策划方案怎么写?看完你也可以直接套用
- 第三章:密码学基本理论
- 东北大学 数据库概论 第三章SQL 习题见解:Find all customers who have an account at all branches located in Brooklyn
- 拼多多开店步骤是什么?在拼多多如何开店?
热门文章
- 服务器UDIMM, LRDIMM,RDIMM三种内存的区别
- 编写一个程序,输入一个句子,然后统计出这个句子当中不同的单词个数。
- Office 2016 Excel实现下拉栏
- 应用MIME将ZPT内容输出为excel文件(word文件)
- iPadmini能运行c语言吗,一个移动固态硬盘,可以给iPad Pro2020和iPad Mini用是什么体验?...
- 【算法题解】2022年第四届河南省CCPC大学生程序设计竞赛(喜提银牌)
- 手机配音用哪个软件?推荐下面这几款软件
- 跟领导关系再好,也别做3件小事,嘴欠手贱,煮熟鸭子会飞
- linux wget 图片,wget命令批量下载图片
- C Primer Plus(第六版)第三章 数据和C