[SpringBoot] 설정 파일 암호화 (Jasypt)

애이용·2021년 9월 24일
0

springboot

목록 보기
20/20
post-thumbnail

깃헙 액션을 위해서 설정 파일(application-dev.yml)을 공개해야하는 상황이다.
하지만 비밀키나 비밀번호가 있기 때문에 보안을 생각해야 한다.

그래서 Jsaypt(Java Simplified Encryption) 를 도입해보도록 하겠다!

디펜던시 추가하기

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
implementation 'org.bouncycastle:bcprov-jdk16:1.46'

Config 클래스

서버 구동 시 암복호화 설정 주입을 한다.

@Configuration
public class JasyptConfig {

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

    @Bean("encryptorBean")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setProvider(new BouncyCastleProvider());
        encryptor.setPoolSize(1);
        encryptor.setPassword(encryptKey);
        encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
        return encryptor;
    }
}

pool size는 머신 코어 수와 동일하게 설정하는 게 좋다고 한다.

application.yml

빈 이름 명시하기

jasypt:
    encryptor:
       bean: encryptorBean

테스트 코드에 암호화할 데이터를 암복호화 해보기

PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("password");
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");

String plainText = "test";
String encryptedText = encryptor.encrypt(plainText);
String decryptedText = encryptor.decrypt(encryptedText);
System.out.println("Enc: " + encryptedText + ", Dec: " + decryptedText);

설정 파일에 암호화한 값을 작성해주면 된다. (ENC(~))

secret_key: ENC([암호화된 값])

VM option 추가

-Djasypt.encryptor.password=암호화할키

Reference

profile
로그를 남기자 〰️

0개의 댓글