简述
总体思路是使用jasypt对application.yml中敏感信息进行公钥加密,然后spring boot用私钥解密。 我不是密码学的专家,欢迎指出错误。
使用openssl生成公钥和私钥
生成私钥
openssl genrsa -out private.pem 2048
用户输入密码,然后生成的加密了的私钥。
使用私钥生成公钥
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
用户需要输入刚才的密码。
一个坑
不知道为什么,jasypy读取上述生成的私钥后,项目启动会报错。上网搜了一下,发现如果使用未加密的PKCS8结构的密钥,项目就能正常运行。
openssl pkcs8 -topk8 -inform pem -in private.pem -outform pem -nocrypt -out privatepkcs8.pem
这是项目最终使用的私钥。
安装jasypt-spring-boot-starter
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
安装jasypt的maven插件
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.4</version>
</plugin>
编写配置文件
配置jasypt
jasypt:
encryptor:
private-key-format: pem
private-key-location: classpath:jasypt/privatepkcs8.pem
指定未加密的PKCS8结构的密钥的classpath和格式(PEM)
配置数据库密码等敏感信息
spring:
datasource:
username: DEC(<username>)
password: DEC(<password>)
将未加密用户名和密码用DEC() 包起来。然后让jasypt的maven插件处理配置文件。
jasypt的maven插件处理配置文件
./mvnw jasypt:encrypt
-Djasypt.encryptor.public-key-format="pem"
-Djasypt.encryptor.public-key-location="file:src/main/resources/jasypt/public.pem"
-Djasypt.plugin.path="file:src/main/resources/application.yml"
指定公钥文件的格式,公钥文件的位置,以及配置文件application.yml的位置,然后用户名和密码就会变成这样:
spring:
datasource:
username: ENC(mey4nOSinR9AWbhc72STQLeaiQJwkUNGZIwfFqtYQyR94xoblGBAhZQbZQMm3er3M95vJNzvga34bXonEeZt5JBSXyFvvMaFpfApG9VA6OpXBaXmyB5DMrk+Fo182+GY6mqWaua38mhFskDOV/buhSzEW7akh6RrFntzfZMUDiJVb0+uduKW0Y//vOadOtfTKBFcuNOuBkARw8ETatwzUED1OB+Q4+PDVdFUSAylzYCdLccKNpZ2sOHPeTx8J36lm7CcndLB0oHfK1NlwmPq/BYEevLxQ+04phThTjkqR7aoiY0CtO6BQTfPKvZ8gEw2XDFE3aChJgH1WyF9cLCsbg==)
password: ENC(Kpyhj7RrARRkENW1d0Z6KnkpaP16zbItIoVSgGaSbOG12Wkwgy7QWGFMbEJCAJI91fiLnIQyLM++K3nR5QJ/wmLwpMCTq2StWm+xRdBTk0pmGeDmVD9dqKvSg82g3FejY3kJGfedogrRvL5mW+zVB37/b310hqvLjn0IxoSh9g8NJkSTGD2TUZ763bh5RiILMTaUHIFFBhAttqapgrzPcMymZmBA8IYhC1JmHGNz/Ibx1SqBsiO5zXiayHe8nQS8vPzdIUewpMB5mSFmAAZJKdd4iyig3D+Ia0jL7qvAqgUob6we+aIRunM/fyKaz9twVZNJy8s7Pxn4S6vdygkCrQ==)
以上就是使用jasypt对spring boot配置文件中的敏感信息进行非对称加密的大致流程。