1.终于把Apollo存储加密这件事搞定了 | 周末福利!源码
2.拒绝"裸奔",源码SpringBoot集成Jasypt加密敏感信息
3.Spring Boot demo系列(九):Jasypt
4.springboot如何进行混淆加密(proguard+xjar)
终于把Apollo存储加密这件事搞定了 | 周末福利!源码
作者:尹吉欢 转自:微信公众号“程序员私房菜”
本文节选自《Spring Cloud微服务入门实战与进阶》
敏感配置,源码如密码等,源码我们期望进行加密存储,源码html读书源码确保其安全性。源码然而,源码Apollo框架并未提供数据加密功能。源码若想实现此功能,源码有两种方法:一是源码修改Apollo源码,添加加解密逻辑;二是源码利用第三方框架进行数据加密。
jasypt-spring-boot是源码一款基于Spring Boot开发的框架,它可自动解密properties中加密的源码内容。在Apollo中,源码我们也可以利用jasypt-spring-boot实现数据的加解密操作。
jasypt-spring-boot的GitHub地址:github.com/ulisesbocchi...
使用jasypt-spring-boot提供的方法对需要加密的配置进行加密,然后将加密内容配置在Apollo中。项目启动时,jasypt-spring-boot会解密Apollo加密的配置,让使用者获取解密后的lock源码原理内容。
创建一个新的Maven项目,并加入Apollo和jasypt的依赖。具体依赖信息如下:
创建一个加密的工具类,用于加密配置。执行main方法后,可以得到如下输出:
input就是hello加密后的内容,将input的值复制存储到Apollo中。存储格式需要遵循一定规则,即需要将加密内容用ENC包起来,这样jasypt才会解密这个值。
使用时可以直接根据名称注入配置,例如:
input的值就是解密后的值,使用者无需关心解密逻辑,jasypt框架在内部处理好了。
jasypt整合Apollo也存在一些不足之处。目前,我只发现了以下两个问题:
上述两个问题与jasypt实现方式有关,意味着这种加密方式可能仅适用于数据库密码等场景,启动时可以解密,且仅使用一次。测试答题源码对于需要加密的核心业务配置,jasypt无法支持实时更新。下章节我将讲解如何修改Apollo源码来解决这两个问题。
扩展Apollo支持存储加解密
前文介绍了如何使用jasypt为Apollo中的配置进行加解密操作,基本需求可实现。但仍存在一些不足之处。
jasypt仅在启动时解密带有ENC(xx)格式的配置,当配置发生修改时无法更新。由于Apollo框架本身不具备对配置加解密的功能,若想实现加解密并支持动态更新,就需要修改Apollo源码来满足需求。
修改源码需要重新打包。这里介绍一种简单实现方法:创建一个与Apollo框架中相同类名的类进行覆盖,这样无需替换已使用的客户端。
若配置中心存储的内容是加密的,意味着Apollo客户端从配置中心拉取下来的配置也是加密的。我们需要在配置拉取下来后对其进行解密,然后再执行后续流程,如绑定到Spring中。在业务点进行切入后,源码社交商城配置中心加密的内容可自动转换为解密后的明文,对使用者透明。
通过分析Apollo源码,我找到了一个最合适的切入点来完成这项任务,即com.ctrip.framework.apollo.internals.DefaultConfig类。DefaultConfig是Config接口的实现类,配置的初始化和获取都会经过DefaultConfig的处理。
在DefaultConfig内部有一个更新配置的方法updateConfig,可在该方法中对加密数据进行解密处理:
这里使用AES进行解密,意味着配置中心的加密内容也需要使用相同的加密算法进行加密。至于格式,仍使用ENC(xx)格式来标识加密配置内容。解密后将明文内容重新赋值到Properties中,其他流程保持不变。
创建一个加密测试类,加密配置内容,并将其复制存储到Apollo中。输出内容如下:
Ke4LIPGOp3jCwbIHtmhmBA==
存储到Apollo中时,需要用ENC将加密内容包起来,如下:
test.input = ENC(Ke4LIPGOp3jCwbIHtmhmBA==)
使用之前的抢答软件源码代码进行测试,Config获取和Spring注入的方式可以成功获取到解密后的数据,并且在配置中心修改后也能实时推送到客户端并成功解密。
本文摘自于《Spring Cloud微服务入门实战与进阶》一书。这是朋友写的一本新书,豆瓣评分8.2。
拒绝"裸奔",SpringBoot集成Jasypt加密敏感信息
前言
  在互联网遍布社会各个角落的时代,伴随着的是安全问题总是层出不穷。 年4月,根据深圳市人民检察院微信消息,深圳某知名无人机企业的工程师因为泄露公司源代码到开源社区Github上而造成了公司巨大的损失,最终被判处有期徒刑6个月,罚款万元。
  一般公司的核心业务代码中,都会存在与数据库、第三方通信的secret key等敏感信息,如果以明文的方式存储,一旦泄露,那将会给公司带来巨大的损失。 然而,许多中小型公司开发者对这方面的管理不够规范,所以很多敏感信息都是直接以明文形式存放到代码中,这样的项目存在的安全风险非常大。
  本篇文章通过讲解:Springboot集成Jasypt对项目敏感信息进行加密,提高系统的安全性。
哪些信息需要加密  一个系统中,一般和数据库、第三方系统等交互的信息都会存在相应的配置文件中,在配置文件中,所有涉及到信息安全的配置项都不应该以明文的形式存储,否则,一旦配置文件泄露,则会引出巨大的安全问题,常见的需要加密的信息项如下:
访问数据库、缓存等涉及到的账号密码
与第三方系统交互的access key、秘钥
其他涉及第三方通信的信息
敏感信息加密的作用  第一:是为了防止人为误操作将代码泄漏时,第三方能够简单获取到系统中的敏感信息,从而可能对系统、数据库等造成破坏。
  其次是一般系统上线都会有代码安全检测的流程,像账号、密码等敏感数据以明文形式存储,一般都是审核不通过的,因此需要进行加密处理。
  最后,作为一名开发者,应该对自我有更高的要求,在开发过程中应该要考虑到潜在的风险,提供相应的处理预案。
选择加密的组件  开源社区强大之处在于:有需求就有人奉献。Jasypt(全称:Java Simplified Encryption),它是一个Java类库,支持开发者无需深入 了解密码学相关工作原理,花费最小的代码在项目中添加基本的加密功能。
  Jasypt官方使用文档:/post/
Spring Boot demo系列(九):Jasypt
Jasypt是一个加密库,提供了Spring Boot集成的库jasypt-spring-boot。本文演示如何使用该库对配置文件进行加密。 首先添加依赖,Gradle方式如下: 依赖添加后,进行简单加密。加密口令直接写在配置文件中,步骤包括: 在配置文件中添加加密口令参数。 在测试类中注入StringEncryptor,使用encrypt方法加密通过@Value获取的值。 运行测试,输出密文,完成属性加密。 可以自定义加密类,实现StringEncrypto接口,配置Bean名称,简化加密过程。 支持非对称加密,生成公钥与私钥,配置到jasypt.encryptor.public-key-string与jasypt.encryptor.private-key-string,进行加密与解密。 对于jasypt.encryptor.password,支持非明文口令传递,方式包括命令行参数、应用环境变量及系统环境变量。 打包时需注意配置Maven参数,Gradle无需额外添加。部署时,通过JAR直接部署,根据需要加上参数,Docker部署时,需在ENTRYPOINT或ENV指定参数。 参考源码提供Java及Kotlin版实现。springboot如何进行混淆加密(proguard+xjar)
项目组核心代码模块部署在用户服务器上,面临安全风险,常规部署方式可能导致数据泄露与代码泄露。为解决这一问题,选择采用代码混淆加密技术,确保数据与代码安全。
项目选择proguard作为混淆工具,主要因为其能够有效处理Spring Boot单体应用,通过修改Maven插件配置,结合Jasypt实现配置文件加密。
采用Xjar进行jar包加密,简化配置流程,避免源码泄露与反编译。具体步骤包括下载Xjar demo,将生成的jar包和自定义密码脚本放置在同级目录,使用Maven命令完成混淆代码编译,并生成加密后的jar包。设置启动脚本添加加密密钥参数,实现安全启动。
混淆前后的对比结果显示,加密处理显著提升了代码和配置文件的安全性,有效防止数据泄露与代码曝光。
总结,通过结合proguard与Xjar,项目实现了高效、安全的代码混淆加密,确保了核心代码模块在部署过程中的安全性。