본문 바로가기
web/SpringBoot

Properties 암호화하기

by 뽀리님 2023. 10. 12.

지금 하고 있는 프로젝트에서 Aws Config 를 세팅하는 도중 accessKey 와 secretKey 를 프로퍼티에 등록하려고 한다.

근데 너무 날것(?) 으로 입력하면 보안이슈도 있고... 뭔가 하수같단말이지!!!

 

그래서 해당값을 Jasypt(Java Simplified Encryption) 를 이용하여 암호화해서 넣어보려한다.

 

우선 간단하게 암호화해서 입력할수 있도록 간단한 function 작성을 위해 Jasypt 라이브러리 추가

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'

 

 

그런다음 암호화 함수작성

 

public static void encProcess() {
    StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
    standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
    standardPBEStringEncryptor.setPassword("testpw");
    String enc = standardPBEStringEncryptor.encrypt("aaa"); // 암호화할 키
    System.out.println("Encrypted --> "+ enc);
}

 

출력

Encrypted --> W98sTo5n/hRme65M+XeJ1Q==

 

해당출력한 값을 Properties 에 ENC( {} ) 감싸서 붙여넣는다 (그래야 암호화된값이라고 인식을 함)

spring.datasource.username=ENC(cGKairTtgdBzoYHifdvRXA==)
spring.datasource.password=ENC(Zb8ijiQ5TY+e/ptXXXdAVw==)

 

 

JasyptConfig.java 작성

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {

    @Bean
    public StringEncryptor jasyptStringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();

        String password = System.getProperty("jasypt.encryptor.password");

        config.setPassword(password); // 암호화 키 값
        config.setAlgorithm("PBEWITHMD5ANDDES"); // 암호 알고리즘
        config.setKeyObtentionIterations("1000"); // 해싱 반복 횟수
        config.setPoolSize("1"); // Encryptor를 클론하여 가지고 있을 갯수 (기본적인 암복호화땐 1로도 충분)
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // Salt를 생성하는 클래스(보안강화)
        //config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator"); // 백터클래스 정의(보안강화)
        config.setStringOutputType("base64"); // 인코딩 될 값 hexadecimal도 사용가능
        encryptor.setConfig(config);
        return encryptor;
    }
}

 

암호화패스워드(jasypt.encryptor.password) 는 보안상 시스템 환경변수로 정의해놓았다.

@EnableEncryptableProperties 이녀석을  써야 application.properties에서 암/복호화가 가능하다.

 

구동하면 잘된다

-끝-

 

 

 

 

참조 : https://velog.io/@iniestar/properties-encrypt https://luvstudy.tistory.com/67

'web > SpringBoot' 카테고리의 다른 글

[REST API] Serializable 정말 구현해야 할까?  (1) 2023.10.18
파일다운로드 시 PDF 워터마크 처리하기  (1) 2023.10.17
HttpOnly + Secure Cookies 생성  (0) 2023.09.12
HTTPS(SSL) 적용  (0) 2023.09.11
Maven VS Gradle  (0) 2023.09.07