Spring

[Spring] Jasypt를 이용하여 코드 암호화하기

F12:) 2024. 11. 20. 22:31

  배경

회사에서 새로 진행되는 프로젝트에 인증서를 적용하기 위해 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(암호화한 값)

이제 실행해보면 암호화한 값이 잘 적용된 것을 볼 수 있다!!



  참고 문서

https://velog.io/@habins226/JASYPT%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-application.yml-%ED%8C%8C%EC%9D%BC-%EC%95%94%ED%98%B8%ED%99%94-%ED%95%98%EA%B8%B0