Cifrado de información confidencial del archivo de configuración SpringBoot

Explicación

Los amigos que han usado el archivo de configuración SpringBoot saben que el contenido del archivo de recursos generalmente se muestra en texto plano y que la seguridad es relativamente baja.

Abrir application.propertieso application.yml, por ejemplo, MySqlla contraseña de inicio de sesión, Redisla contraseña de inicio de sesión y de terceros clave y así barrer, presenta aquí un componente de descifrado para mejorar algunos de los atributos de seguridad de configuración.

jasyptUn kit de herramientas en Springboot fue escrito por un dios extranjero para cifrar la información en el archivo de configuración.

Dirección de demostración de GitHub

Nombre de usuario de datos y cifrado de contraseña de base de datos como ejemplo

Paquete de importación

Compruebe que la última versión puede ir a:

https://github.com/ulisesbocchio/jasypt-spring-boot

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

2. Configure la contraseña de agregar / eliminar

# jasypt加密的密匙
jasypt:
  encryptor:
    password: Y6M9fAJQdU7jNp5MW

3. Generar clave encriptada en caso de prueba

@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseTest {

    @Autowired
    private StringEncryptor encryptor;

    @Test
    public void getPass() {
        String url = encryptor.encrypt("jdbc:mysql://localhost:3306/mydb?autoReconnect=true&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
        String name = encryptor.encrypt("root");
        String password = encryptor.encrypt("123456");
        System.out.println("database url: " + url);
        System.out.println("database name: " + name);
        System.out.println("database password: " + password);
        Assert.assertTrue(url.length() > 0);
        Assert.assertTrue(name.length() > 0);
        Assert.assertTrue(password.length() > 0);
    }
}

La siguiente es la cadena cifrada de salida:

database url: 6Ut7iADnHS18cManoFJuNRQ5QEDfcho/F96SOhsHZdXlHYCa5PSrz6rk48I9eHB7qPp5AxDFBk9xi0I1hi6BJ0DSPYA9443gBAk5JDUxDufjUKsdh6knZJLNELmFJzYrDvCu4S0x22MYdZqJDLbyDUU2JcoezCvs156vmsPgU4A=
database name: fmai72yGYKGlP6vTtX77EQ==
database password: GPMG7FGV+EA9iGkC27u67A==

4. Reemplace la cadena encriptada con el texto plano original

application.io.yml

server:
  port: 8080
spring:
  # 数据库相关配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # 这里加上后缀用来防止mysql乱码,serverTimezone=GMT%2b8设置时区
    url: ENC(h20YiPrvNnuuTGjlrE1RVpudMuIQAS6ZPSVo1SPiYVyLen7/TWI5rXVRkStA3MDcoVHQCmLa70wYU6Qo8wwtnsmaXa5jykD3MNhAp5SGJxHsTG5u7tflPdnNmOufyhdsYPxBGWAgibYs9R7yBfrvtwBTRbe096APd3bnG3++Yro=)
    username: ENC(sT6BztXbJEa71eg3pPGYMQ==)
    password: ENC(MpSZFJ9ftq+3+VUANZjr0Q==)
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  # 返回的api接口的配置,全局有效
  jackson:
   # 如果某一个字段为null,就不再返回这个字段
    default-property-inclusion: non_null
    date-format: yyyy-MM-dd HH:mm:ss
    serialization:
      write-dates-as-timestamps: false
    time-zone: GMT+8
# jasypt加密的密匙
jasypt:
  encryptor:
    password: Y6M9fAJQdU7jNp5MW

NOTA: El anterior ENC()texto se fija.

Postdata

Configurar el valor de sal durante la implementación

Para evitar que se filtre la sal, se invierte la contraseña. Puede usar el comando para pasar el valor de sal cuando se implementa el proyecto:

java -jar xxx.jar  -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW

O configúrelo en las variables de entorno del servidor para mejorar aún más la seguridad.

Abrir /etc/profilearchivo

vim /etc/profile

En la profilesal de inserción (sal) final variable del archivo

export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

Compile para que el archivo de configuración surta efecto

source /etc/profile

Corriendo

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
420 artículos originales publicados · 143 pulgares arriba · 890,000 vistas

Supongo que te gusta

Origin blog.csdn.net/jeikerxiao/article/details/96480136
Recomendado
Clasificación