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.
Fügen Sie hier eine Bildbeschreibung ein

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

Fügen Sie hier eine Bildbeschreibung ein

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

Guess you like

Origin blog.csdn.net/qq_38254635/article/details/132026841