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.properties
ou application.yml
, por exemplo, MySql
senha de login, Redis
senha 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.
jasypt
Um 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/profile
arquivo
vim /etc/profile
No profile
sal 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