일반적으로 프로젝트 초기 DB 설정 시 프로퍼티 파일이나 yml 파일에 DB 접속정보를 입력하게 됩니다.
이러한 정보가 포함된 소스를 Github와 같이 공개된 장소에 올리게 된다면 보안적으로 문제가 발생할 수 있습니다.
이번 글에서는 이러한 개발 정보를 암호화해주는 Jasypt 라이브러리에 대해 정리해보겠습니다~
개발자가 간단히 프로젝트에 기본 암호화 기능을 사용할 수 있도록 지원해주는 Java 라이브러리입니다.
실제로 Jasypt를 이용해 설정 파일 내 민감 정보를 암호화해보겠습니다.
먼저 암호화 기능을 사용하기 위해 dependencies에 해당 라이브러리를 추가해줍니다.
dependencies {
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
}
Jasypt 암복호화 사이트
jasypt 관련 설정 시 password를 설정하는 부분이 있는데 이 설정이 노출되는 경우 프로젝트 내에 암호화된 값을 복호화할 수 있기에, 위 사이트를 통해 jasypt password를 암호화합니다.
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Bean(name = "encryptorBean")
public StringEncryptor stringEncryptor(SimpleStringPBEConfig simpleStringPBEConfig) {
PooledPBEStringEncryptor stringEncryptor = new PooledPBEStringEncryptor();
stringEncryptor.setConfig(simpleStringPBEConfig);
return stringEncryptor;
}
@Bean
@ConfigurationProperties("config.encrypt")
public SimpleStringPBEConfig simpleStringPBEConfig() {
return new SimpleStringPBEConfig();
}
}
jasypt.ecryptor.bean
에 위 Config에서 명시한 Bean 입력
config.ecrypt.password
는 위에서 사이트를 통해 암호화 한 password 입력
jasypt:
encryptor:
bean: encryptorBean
config:
encrypt:
password: ie2Fa4lO1v1ODSx738OIUEiv/9rAFOqk
algorithm: PBEWithMD5AndDES
provider-name: SunJCE
pool-size: 1
key-obtention-iterations: 1000
string-output-type: base64
@SpringBootTest
class JasyptConfigTest {
@Autowired
@Qualifier("encryptorBean")
private StringEncryptor stringEncryptor;
@Test
public void generatePassword() {
String encrypt = stringEncryptor.encrypt("password");
System.out.println(encrypt);
String decrypt = stringEncryptor.decrypt(encrypt);
System.out.println(decrypt);
}
}
ENC("암호화 password")
형식으로 암호화된 값 적용
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306
username: dbuser
password: ENC(WHXxOvGjJa7qXjALhA7ghdoYksJjabL/)
🔗 참고 URL