[Spring] Jasypt를 이용하여 코드 암호화하기
배경
회사에서 새로 진행되는 프로젝트에 인증서를 적용하기 위해 yml에 인증서 정보를 적어둬야한다.
그런데, yml 파일에 인증서의 비밀번호를 그대로 노출시키기가 꺼려졌다.
깃헙을 이용하는 것이 아니라 secret key도 사용할 수 없으니, 해당 비밀번호를 암호화해서 저장해야겠다고 생각했고, 찾아보던 중 Jasypt라는 라이브러리를 알게 되었다.
적용
1. build.gradle에 import하기
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
참고로 자바는 jdk 17을 사용 중이고, springboot는 3.2.11버전이다.
2. JasyptConfig.java 클래스 작성하기
Jasypt를 사용하기 위해서는 Config 파일이 필요하다. 나는 아래와 같이 작성하였다.
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Value("${jasypt.encryptor.key}")
String key;
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(key);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
자세히 알아보지는 않았지만, 우리가 암호화한 키를 주입한 후에 이를 코드 상에서 사용할 때는 복호화 과정이 필요하므로 복호화하기 위한 설정인 듯 하다.
3. key.yml에 secret-key 등록
굳이 key.yml이 아니여도 된다. 단지 해당 yml 파일은 secret-key가 들어있으므로, 꼭! 깃헙이나 공개된 장소에는 커밋을 하면 안된다. 그러면 암호화하는 이유가 없어진다...
jasypt:
encryptor:
bean: jasyptStringEncryptor
key: "secret-key"
여기서 secret-key에 해당하는 부분에 원하는 키를 작성해주자.
4. 암호화 값 얻기
이제, 암호화할 값을 얻어야한다.
아래의 링크에 접속하자.
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
아래처럼 값을 넣어주고 암호화할 값을 얻으면 된다.
이제 이 암호화한 값을 코드에 사용하면 된다.
5. 암호화 값 사용하기
필자의 경우는 yml 설정에서 인증서에 해당하는 비밀번호를 암호화해야했기에, yml에 적어주었다.
yml에 적용할 때는 ENC() 함수 안에 인자로 암호화할 값을 넣어주면 된다.
server:
ssl:
enabled: true
key-store-password: ENC(암호화한 값)
이제 실행해보면 암호화한 값이 잘 적용된 것을 볼 수 있다!!
참고 문서