Jasypt는 public한 곳에 애플리케이션을 배포할 때 DB 계정이나 중요 비밀 키 값들이 평문으로 그대로 저장되어 올라가는 것을 막기 위해 프로퍼티를 간단하게 암호화할 수 있는 라이브러리입니다.
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
@Configuration
@Profile({"dev","real"})
public class JasyptConfig {
@Value("${encryptor.key}")
private String password;
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
저는 instakyuram으로 패스워드를 설정했습니다.
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: password
url: jdbc:mysql://localhost:3306/kyuram
root
-> oYO/9DBKBBCkp9If+M0cgA==
password
-> qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz
jdbc:mysql://localhost:3306/kyuram
-> 2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP
암호화된 데이터는 ENC(암호화 데이터) 와 같이 암호화 되었다는 표시를 해줘야합니다.
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: ENC(oYO/9DBKBBCkp9If+M0cgA==)
password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz)
url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP)
JPA를 의존성에 추가하고 application.yml에 JPA 설정을 추가하고 애플리케이션을 실행해봅니다.
JPA를 의존성에 추가하면 DB Connection이 제대로 이루어지지 않는다면 애플리케이션은 실행되지 않을 것 입니다.
spring:
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: ENC(oYO/9DBKBBCkp9If+M0cgA==)
password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz)
url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP)
jpa:
show-sql:true
hibernate:
ddl-auto: none
generate-ddl:false
defer-datasource-initialization:true