SpringBoot精选

使用Jasypt加密Spring配置文件及其注意事项

2019-10-23  本文已影响0人  SevenLin1993

技术公众号:Java In Mind(Java_In_Mind),欢迎关注!

问题

在我们的应用程序,为了防止hardcode,通常会把程序中可能会变的,或者与环境相关的信息抽离出来,从而形成配置文件。

在Java应用中通常就是properties文件或者yml文件之类的,但是这部分信息由于抽离独立开来将会变得比较容易泄露,而配置文件中往往含有比较敏感的信息,例如,数据库密码,这些数据一旦泄露有可能造成严重的后果;那么自然而然的,我们就会想到对配置文件的敏感信息进行加密。

Jasypt简介

Jasypt(Java Simplified Encryption),一个用于加密的Java类库,目的就是让开发者很简便的将加密功能引入自己的项目中来,而不需要去明白具体的加密知识,其有如下特点:

Spring Boot集成Jasypt加密配置文件

配置

SpringBoot集成Jasypt配置很简单,只需引入依赖,然后配置Jasypt相关属性参数即可:

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>
# 如配置,application.properties
application.author=ENC(9afnWGGYyzZN38vYYfYx1ZM9ql//Vp+8)
java -jar foo.jar -Djasypt.encryptor.password=HelloWorld
加密

那么,配置文件中的加密密文该如何获取呢?Jasypt官方提供了CLI工具,通过脚本可以生成对应的密文,具体操作如下:

使用&验证

注意事项

使用时将密钥与密文分开配置

我看过有的在使用Jasypt的时候,将密钥与密文都放在一个配置文件里,那不等于把钥匙放在门口一样的意思么,虽然加密了,但是只要配置文件泄露了,那么就可以通过密钥来实现解密,达不到保护敏感信息的目的,可以有以下几种方式来配置密钥:

其他配置项
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.iv.NoIvGenerator
jasypt.encryptor.stringOutputType False base64
jasypt.encryptor.proxyPropertySources False false

其他的可以详看配置类:

com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties

上一篇 下一篇

猜你喜欢

热点阅读