[Spring Boot] - 스프링 프로퍼티 암호화

스프링부트 민감정보 암호화 하기

운영 중인 프로그램에서 DB 암호나 API 키와 같은 민감 정보를 설정 파일에 평문으로 저장할 경우, 프로그램이 유출되면 그대로 외부에 노출되는 심각한 보안 문제가 발생할 수 있습니다. 이를 방지하기 위해 프로퍼티 암호화를 적용하면, 설정값이 유출되더라도 평문이 아닌 암호화된 형태로만 노출되므로 보안성을 크게 강화할 수 있습니다.

자바 환경에서는 이러한 암·복호화를 손쉽게 지원하는 Jasypt 모듈을 활용할 수 있어, 운영 환경에서 안전하게 민감 정보를 관리할 수 있습니다.

이번 포스팅에서는 Spring boot 에 Jaspyt 적용해 프로퍼티를 암복호화 하는 내용을 작성했습니다

암복호화를 위한 라이브러리 추가

// Jasypt for property encryption
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'

값 암호화 하기

java -cp "build/libs/app.jar" com.ulisesbocchio.jasyptspringboot.cli.JasyptEncryptorCLI \
input="my-db-pass" \
password="${JASYPT_ENCRYPTOR_PASSWORD}" \
algorithm="PBEWITHHMACSHA512ANDAES_256" \
ivGeneratorClassName="org.jasypt.iv.RandomIvGenerator"

Configuration 추가

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {

@Value("${jasypt.encryptor.password:defaultPassword}")
private String encryptorPassword;

@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(encryptorPassword);
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}

설정 값 추가

jasypt:
encryptor:
password: ${JASYPT_PASSWORD:defaultPassword}
algorithm: PBEWITHHMACSHA512ANDAES_256
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
Share