진행중인 스프링 프로젝트의 설정 파일 암호화를 하려고 한다.
처음엔 .gitignore 파일에서 관리하려고 했는데, 매번 추가하는 것도 일이고 잊을 가능성도 있어 쓰지 않기로 했다.
그렇게 찾은 설정 암복호화 프레임워크가 Jasypt이다.
Jasypt란, Java 애플리케이션에서 암복호화를 지원해주는 프레임워크.
개발자는 암호화 작동 방식에 대한 깊은 지식 없이도 프로젝트에 기본 암호화 기능을 추가할 수 있다.
Jasypt를 사용하기로 결정했으니 Spring Boot 프로젝트에 직접 적용해보자.
// jasypt 의존성 추가
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
private static final String KEY = "test"; // 암호화에 사용될 키
private static final String ALGORITHM = "PBEWithMD5AndDES";
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(KEY); // 암호화 시 사용할 키 -> 이 키를 가지고 암복호화 진행
config.setAlgorithm(ALGORITHM); // 사용할 알고리즘
config.setKeyObtentionIterations("1000"); // 반복할 해싱 함수
config.setPoolSize("1"); // pool 크기
config.setProviderName("SunJCE"); // 사용할 암호화 라이브러리
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
config.setStringOutputType("base64"); // 인코딩 방식
encryptor.setConfig(config); // 설정 주입
return encryptor;
}
}
만약 암호화에 사용될 키가 노출된다면??
: 다시 복호화될 수 있다는 뜻이므로 encrypt key 역시 노출되지 않게 설정 필요
IntelliJ의 Edit Configuration으로 이동
Config 파일에서 다음과 같이 적용 가능하다.
[암복호화 사이트]
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
암호화할 텍스트와 encrypt key 값 넣고 암호화 진행
ENC({암호화된 코드}) 형식으로 .yml 파일에 값 추가
문제 없이 빌드됐으면 Jasypt 적용 성공!!
흥미로운 내용이네요!