Criptografia de informações confidenciais do arquivo de configuração SpringBoot

Explicação

Amigos que usaram o arquivo de configuração do SpringBoot sabem que o conteúdo do arquivo de recurso geralmente é exibido em texto sem formatação e a segurança é relativamente baixa.

Abrir application.propertiesou application.yml, por exemplo, MySqlsenha de login, Redissenha de login e chave de terceiros e assim varrer, apresentado aqui um componente de decodificação para melhorar alguns dos atributos de segurança de configuração.

jasyptUm kit de ferramentas no springboot foi escrito por um deus estrangeiro para criptografar as informações no arquivo de configuração.

Endereço de demonstração do GitHub

Criptografia de nome de usuário de dados e senha de banco de dados como um exemplo

Pacote de importação

Verifique se a versão mais recente pode ir para:

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 a senha de adição / exclusão

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

3. Gere chave criptografada no caso de teste

@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);
    }
}

A seguir está a sequência criptografada de saída:

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

4. Substitua a sequência criptografada pelo texto sem formatação original

applicatioin.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: O acima ENC()redação é fixo.

Postscript

Configurar valor de sal durante a implantação

Para impedir que o sal vaze, a senha é revertida.Você pode usar o comando para transmitir o valor de sal quando o projeto é implantado:

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

Ou configure-o nas variáveis ​​de ambiente do servidor para melhorar ainda mais a segurança.

Abrir /etc/profilearquivo

vim /etc/profile

No profilesal de inserção (sal) final variável de arquivo

export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

Compilar para fazer o arquivo de configuração entrar em vigor

source /etc/profile

Running

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
Publicado 420 artigos originais · 143 thumbs up · 890.000 visualizações

Acho que você gosta

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