Spring Boot application.properties 암호화 내역 복호화 방법
web/Spring

Spring Boot application.properties 암호화 내역 복호화 방법

반응형

Spring Boot에서는 여러 설정값을 application.properties에 입력하여 사용할 수 있다.


Spring보다 편리하고 효율적이다.
하지만 DBMS 사용을 위해서 연결정보를 properties에 입력할 때 평문으로 그냥 삽입하면 정보 유출에 문제가 발생 할 수 있다. 

이를 해결하기 위해서 application.properties에서 어떻게 사용하는지 확인해보자.


1. application.properties 내용 암호화하여 입력하기

우선 application.properties에 있는 내용을 암호화 해서 삽입한다. 나는 AES256으로 암호화 하여 삽입하였다.

1
2
spring.datasource.username=K2amNtg+kL5xK23g7H3Znw==
spring.datasource.password=ivWXmtXGN289BY6q9AwRnw==
cs


2. EnvironmentPostProcessor 구현하기

EnvironmentPostProcessor 인터페이스는 application context가 올라가기전에 application을 커스터마이징 할 수 있게 지원해주는 기능을 제공한다.

postProcessEnvironment 메소드를 구현하여 원하고자 하는 속성값을 변경하여 처리할 수 있다.  이 부분에서 DBMS 연결정보를 다시 복호화 처리하도록 설정하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * JDBC 접속 ID 와 Password 암복호화에 사용하기 위해 사용하는 Processor
 *
 * @author cjung
 * @date 2018. 08. 12
 *
 */
public class EncryptionEnvironmentPostProcessor implements EnvironmentPostProcessor {
 
    private final Logger logger = LoggerFactory.getLogger(EnvironmentPostProcessor.class);
 
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        Properties props = new Properties();
        try {
            props.put("spring.datasource.password", AES256Cipher.getInstance().AES_Decode(environment.getProperty("spring.datasource.password")));
            props.put("spring.datasource.username", AES256Cipher.getInstance().AES_Decode(environment.getProperty("spring.datasource.username")));
        } catch (Exception e) {
            logger.error("Fail decrypt datasource info", e);
        }
 
        environment.getPropertySources().addFirst(new PropertiesPropertySource("myProps", props));
    }
 
}
cs


3. META-INF/spring.factories 에 클래스 full 경로 기입

EnvironmentPostProcessor를 구현한 클래스가 정상적으로 동작하기 위해서는 classpath에 META-INF/spring.factories 파일을 만들고 해당 클래스의 풀 경로를 기입해주어야한다.


Full path 기입

1
2
# post processor 적용
org.springframework.boot.env.EnvironmentPostProcessor=com.wedul.common.config.EncryptionEnvironmentPostProcessor
cs


참고
https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/env/EnvironmentPostProcessor.html


반응형