SpringBoot integriert Jasypt und verschlüsselt YML-Konfigurationsdateien
Bei der letzten Sicherheitsüberprüfung des Projekts wurde festgestellt, dass das Datenbankkennwort und das Redis-Kennwort in der Konfigurationsdatei immer noch im Klartext verarbeitet werden
1. POM-Konfiguration
<!-- 配置文件yml加密 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
2. Generieren Sie Chiffretextcode
Nur als Werkzeugklasse zum Generieren von Chiffretext
package com;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class JasyptUtil {
private final static String SECRECT = "1234qwer"; //秘钥
private final static String ALGORITHM = "PBEWithMD5AndDES"; //加密算法
@Test
public void testEncrypt() throws Exception {
System.out.println("密文密码:" + encrypt("myPassword"));
}
private String encrypt(String text){
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm(ALGORITHM);
config.setPassword(SECRECT);
standardPBEStringEncryptor.setConfig(config);
return standardPBEStringEncryptor.encrypt(text);
}
public String decrypt(String text) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setAlgorithm(ALGORITHM);
config.setPassword(SECRECT);
standardPBEStringEncryptor.setConfig(config);
return standardPBEStringEncryptor.decrypt(text);
}
}
3. Konfiguration
3.1, YML-Verschlüsselungskonfiguration
(Die jasypt-Konfiguration muss oben platziert werden)
#加密配置
jasypt:
encryptor:
password: 1234qwer # 秘钥
algorithm: PBEWithMD5AndDES # 加密算法
iv-generator-classname: org.jasypt.iv.NoIvGenerator
3.2, Chiffretext-Konfiguration
Der von der Tool-Klasse verschlüsselte Chiffretext wird mithilfe von ENC() direkt in die Konfigurationsdatei eingefügt.
3.3, Konfiguration starten
Einige Leute sagen, dass Sie es in der Startup-Klasse konfigurieren müssen. Ich habe hier keine Konfiguration und Sie können es direkt verwenden.
Wenn es nicht gestartet werden kann, kann es in der Startup-Klasse konfiguriert werden@EnableEncryptableProperties
3.4. Bereitstellungskonfiguration
Während des Entwicklungsprozesses können Sie den geheimen Schlüssel direkt in yml einfügen. Wenn Sie ihn jedoch nach der Freigabe für die Produktion so eingeben, unterscheidet er sich nicht vom Klartext.
Beim Veröffentlichen kann die Passwortkonfiguration daher leer gelassen werden. Legen Sie den geheimen Schlüssel über den Startbefehl des JAR-Pakets fest. wie folgt:
nohup java -jar -Djasypt.encryptor.password='1234qwer' /app/web.jar --server.port=8080 --spring.config.location=/app/web.yml >> /app/web.out 2>&1 &
4. Einige Gruben sind aufgetreten
1. Die jasypt-Konfigurationsdatei sollte über der ENC()-Verschlüsselungstextkonfiguration platziert werden.
2. Die Version muss übereinstimmen.
3. Der Startbefehlsschlüssel muss hinzugefügt werden.
Fehler: Eigenschaften unter „spring.datasource.password“ konnten nicht an java.lang.String gebunden werden.
Referenz: https://blog.csdn.net/qq_38254635/article/details/132027639