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.properties
o application.yml
, por ejemplo, MySql
la contraseña de inicio de sesión, Redis
la 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.
jasypt
Un 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/profile
archivo
vim /etc/profile
En la profile
sal 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