Study/Java Spring Boot

Spring Boot - JASYPT를 사용한 프로퍼티 암호화하기

kahaha 2023. 3. 21. 19:46

yml설정에서 AWS나 DB와 관련된 키값을 암호화 하려고 한다.

 

JASYPT 는 암호화에 관해 잘 모르는 개발자도 손쉽게 암호화를 할 수 있도록 돕는다.

 

 

1.  우선 gradle설정을 추가한다.

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3' // yml Secret Key 암호화

 

 

2.  암호화 관련 설정 클래스파일 만들기

https://github.com/ulisesbocchio/jasypt-spring-boot#use-you-own-custom-encryptor

에서 확인할 수 있다.

 

GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot

Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.

github.com

@Configuration
public class JasyptConfig {

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

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

-  나는 외부에서 키값을 입력받는 방식을 사용하였다.

 

 

3. 키값 암호화 하기

https://www.devglan.com/online-tools/jasypt-online-encryption-decryption

- 암호화하려는 키를 입력한다

- Two Way 방식을 선택

- 패스워드를 임의로 입력한다(패스워드 기억해야함) / 패스워드는 복호화시 필요하다.

 

4. 암호화된 키로 yml 설정하기

cloud:
  aws:
    region:
      static: ap-northeast-2
    s3:
      credentials:
        access-key: ENC(xFO5USJEzJjHL8RB+a7IREpyQOoHp4HZhL2OFzzKIBs=)
        secret-key: ENC(PtaZU3cqX2thf4/AeCsoMF+XCJRo3WR8q3U1iGexhAqLXaFIQ5JKn8CKkO3uRyKipF9cb/Qy4W8=)
    stack:
      auto: false
     
      
#jasypt: #패스워드 암호화/복호화 키
#  encryptor:
#    password: 설정한 패스워드

나는 AWS의 S3키를 암호화 하였다.

 

암호화된 키를 넣어줄때는  ENC(암호화된 키) 형식으로 넣어줘야 한다.

 

맨 아랫줄 패스워드에 설정한 패스워드를 넣어줘도 동작하지만 보안에 취약함으로 따로 설정하여 관리한다.

 

 

5. 패스워드 관리하기

- 직접 실행할 때 java -jar 명령어 뒤에 붙여주는 방법

--jasypt.encryptor.password=패스워드

 

- intellij 환경변수를 설정하는 방법

 

실행버튼 옆 점세개 클릭 -> 편집 -> 옵션수정 -> 환경변수 클릭 -> 환경변수 입력 후 적용 및 확인

 

 

 

- Github Actions 환경변수로 관리하는 방법

https://kjsu1994.tistory.com/42