본문 바로가기

개발일지/spring

Spring Boot 스프링부트 jasypt이용한 yml에 민감정보(DB 정보) 암호화 세팅하기

1.build.gradle> dependancies에 
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'

추가

 

gradle 프로젝트 다시로드

 

2.  클래스 추가

 

@Configuration
@EnableEncryptableProperties
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.setPoolSize("1");
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setStringOutputType("base64");
        config.setKeyObtentionIterations("1000");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        encryptor.setConfig(config);
        return encryptor;
    }
}

 

 

@Value("${jasypt.encryptor.password}")
private String PASSWORD;
-> 암호화 키를 숨기기 위해서 빼놓는다.
 
3.
 

실행/디버그 구성>실행 옵션추가> VM옵션 추가 >-Djasypt.encryptor.password=[암호화키] 입력

 

-> 여기에 있는 키로 민감정보들을 암호화 한다. 따라서 실행조건에 빼놓는다.

 

4. 

@SpringBootTest
public class JasyptTest {
    @Autowired
    private JasyptConfig jasyptConfig;

    @DisplayName("1. 암/복호화 테스트")
    @Test
    void test_1(){
        String url = "db주소";
        String username = "사용자이름";
        String password = "패스워드";
        System.out.println("url: ENC(" + jasyptConfig.stringEncryptor().encrypt(url) + ")");
        System.out.println("username: ENC(" + jasyptConfig.stringEncryptor().encrypt(username)+ ")");
        System.out.println("password: ENC(" + jasyptConfig.stringEncryptor().encrypt(password)+ ")");
    }
}

테스트 코드 작성

 

 

참고:

 

 

테스트 환경을 실행할 때는 vm옵션이 아니라 환경변수에 -D를 빼고 jasypt.encryptor.password=[암호화키] 입력

 

이거 왜 테스트 환경에서 세팅 안되는지 모르겠는데 왜 안되는지 찾다가 시간 많이 소요됨ㅜㅜ

 

4. .yml에 각각의 요소들을

 

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ENC(암호화된DB주소입력)
username: ENC(암호화된사용자이름입력)
password: ENC(암호화된패스워드입력)

 

입력.

 

그럼 잘 돌아간다 ~