使用 jasypt 保护密钥

2020/11/19 18

Spring

在软件开发中,我们会经常配置一些机密配置,例如:数据库连接字符串、邮箱 Token 等,如果你的代码在私有仓储中托管,你或许不会担心这些机密文件被泄露,但如果你的项目是开源的,那就应该考虑安全性了。

在 .NET 中,微软的 Visual Studio 支持“一键”设定机密文件,详情参阅:ASP.NET Core 中的开发中安全存储应用机密

在 Java 中,如果你使用 Spring Boot 开发应用,你也可以很便捷的保护密钥。

一、添加以下依赖

<dependency>
 <groupId>com.github.ulisesbocchio</groupId>
 <artifactId>jasypt-spring-boot-starter</artifactId>
 <version>2.1.2</version>
</dependency>

注意:我没有添加最新版本,在此文章发表时,最新版本是 3.0.3,但是无法正确解密,即使按官方配置了 jasypt.encryptor.algorithm=PBEWithMD5AndDESjasypt.encryptor.iv-generator-classname=org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI,也仍然无法解决,关于此问题,请参阅 github

依赖安装成功后,你就可以解密,从而得到原始的密码。

二、加密

可以使用在线工具快速加密,将得到的密文配置到文件中:

spring.datasource.password=ENC(Wn+c1flDTJ3DypwJ8Wkxmw==)

三、解密

启动程序时,需要指定加密时的口令,加密是通过对称加密方式进行的,所以需要这个口令解密,请不要通过配置文件的方式配置 jasypt.encryptor.password,这种方式会使得保护密钥没有任何意义,因为你泄露了口令。

如果是 gradle 启动:

gradle bootRun --args='--jasypt.encryptor.password=Secret Key'

也可以定义环境变量 JASYPT_ENCRYPTOR_PASSWORD=Secret Key 到系统中

也可以在 Intellij IDEA 中 Environment variables 中添加 --jasypt.encryptor.password=Secret Key