当前位置: 首页 > 网络应用技术

如何加密Spring Boot项目的配置文件信息

时间:2023-03-07 11:45:33 网络应用技术

  实际上,需要对项目的某些配置信息进行加密,以减少敏感信息泄漏的风险。例如,当使用DRUID时,您可以基于基于公共 - 私有键的加密方法对数据库密码进行加密。

  但是,更常见的是,还需要加密敏感信息,例如REDIS密码和MQ密码,此时并不那么方便。本文介绍了Java类库Jasypt,这也是基于配置文件信息的演示春季启动项目。

  让我们首先创建一个简单的春季启动项目,并构建一个加密数据的方案。

  不管想法方法或官方网站如何,首先创建一个春季启动项目,核心依赖性是:

  创建配置文件类ConfigProperties:

  配置文件中的配置属性被注入此类供后续使用。

  创建一个控制器类以测试和验证是否可以正常运行:

  对应于configproperties类,应用程序中的配置。专业如下:

  此时,启动项目和访问控制器,可以正常打印出配置信息,表明程序可以正常运行。

  但是,配置文件直接显示密码项。如果其他人看到配置文件,则可能导致密码泄漏。

  为了响应上述情况,我们通常会加密敏感信息,以避免曝光清晰的文本密码信息并提高安全级别。

  加密加密的基本思想是:配置文件中的存储加密内容,解析配置文件注入时解密。

  但是,如果您获得了项目源代码,则会知道可以解密加密算法和秘密密钥。这里的加密只是安全保护层,但不是灵丹妙药。

  让我们看看如何基于jasypt进行加密。

  以下基于上述弹簧启动项目。

  使用不同版本的JASYPT是不同的。这是基于版本3.0.4,JDK8,Spring Boot 2.5.5。

  使用之前,首先检查JDK8 JRE中是否安装了无限长度的JCE版本,否则在执行加密操作时将抛弃解密失败。

  输入$ java_home/jre/lib/安全目录以查看local_policy.jar.jar和us_export_policy.jar是否包括。如果不包括在内,请通过Oracle的官方网站下载,下载地址:https://wwww.oracle.com/Java/Technologies/Javase-JCE8-DOWNLOADS.html。

  下载文件是:jce_policy-8.zip

  该文件包含三个文件:

  检查$ JAVA_HOME/JRE/LIB/SECurity Directory中是否有两个JAR软件包文件。如果没有,请复制它,如果有任何覆盖范围。

  简单地引入JASYPT对Spring Boot的依赖。只需介绍以下依赖项:

  目前,JASYPT组件的自动配置已生效,仅需要加密的数据。

  为了促进密码的加密,您还可以在pom.xml中的构建元素中介绍相应的插件。这将稍后使用:

  在这一点上,所有准备工作均已完成。

  有很多方法可以加密内容的内容。这里选择了两种方法来介绍。

  方法1:单位测试密文;

  构建以下单元测试类,请使用默认实例化字符串centencryptor来加密密码:

  其中,“ admin123”是要加密的内容。执行上述过程,您可以打印加密内容。这种加密内容的形式使用默认值。

  方法两个:通过maven插头生成密码文本-in

  上面已经引入了JASYPT的Maven插头 - 可以通过生成密码生成。

  步骤1:将加密密码添加到配置文件:

  然后修改需要在配置文件中加密的数据。添加“ dec(”,在数据末尾添加“添加”),修改如下:

  此处添加的DEC()是告诉插头-in。需要对内容的这一部分进行加密。注意这里的关键字是DEC。

  步骤2:Maven命令,加密上述数据

  以下命令在命令中执行:

  目前,查看配置文件中的conf.password数据已成为:

  请注意,原始DEC成为ENC,原始密码成为加密密码。

  目前,如果要查看清晰的文本,则可以执行以下命令:

  该命令不会将配置文件中的密文修改为明亮的文本,而仅在控制台上输出显式结果。

  在上述操作之后,所有修改步骤都已完成,并且只需要激活系统。

  密码传输方法完成上述步骤,直接启动系统并访问相应的请求,您会发现可以成功打印原始密码。

  在上面的示例中,我们将加密密码放在application.properties文件中。这是不安全的。如果您检查代码,您将知道如何解密。通常,可以使用另一种表单传递参数:在启动命令中传输密码。

  例如:

  这样,密码就不需要存储在代码中,从而在一定程度上提高了安全性。当然,您还可以传递环境变量,以便甚至开发人员也无法获取生产密码。

  关于JASYPT的使用和春季启动的集成,更多的内容也可以参考官方文档描述。如果您的项目中存储了许多密码,那么确实有必要考虑使用类似的框架进行加密处理。

  示例源代码地址:https://github.com/secbr/springboot-lll/tree/master/springboot-jasypt

  官方源代码地址:https://github.com/ulisesbocchio/jasypt-dring-boot

  博客作者简介:“ Springboot Technology Inner Book”技术书籍作者,喜欢学习技术,撰写技术干货文章。

  公共帐户:博客作者的公共帐户“计划的新愿景”,欢迎关注?

  技术交流:请联系博客微信:Zhuan2quan