배경
회사에서 새로 진행되는 프로젝트에 인증서를 적용하기 위해 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(암호화한 값)
이제 실행해보면 암호화한 값이 잘 적용된 것을 볼 수 있다!!
참고 문서
'Spring' 카테고리의 다른 글
[Spring] AttributeConverter를 사용해 원하는 포맷으로 저장하기 (0) | 2024.11.20 |
---|---|
[Spring] @RequestBody와 @RequestParam (0) | 2024.01.22 |