application.properties 암호화 - 비전공 뉴비들 프로젝트 DB 보호하자

gi.dor·2024년 5월 2일
0

TIL

목록 보기
1/1

application.yml 이나 application.properties 파일에 DB의 비밀번호 또는 키 값을
입력 한채로 깃허브에 PUSH 하는 경우 데이터들이 외부로 노출되서 보안에 문제가 생길수 있다


어떤문제냐고 ?

실제로 지난 프로젝트 당시 DB에 저장된 데이터를 모두 빼앗기고 비트코인을 지불하라는 메세지도 받았다

덕분에 DB 통채로 날리고 처음부터 다시 데이터를 손수 넣은 기억이 있다....

대충 이런거 받음 ^^;


그외에 컴퓨터 포맷을 하는 상황이 올수도 있고 해서 무튼 기타등등 이유로 인해
암호화 세팅을 해두려고 한다.



Jasypt

Jasypt(Java Simplified Encryption)는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도
최소한의 노력으로 자신의 프로젝트에서 설정 파일의 속성 값들을 암호화, 복호화할 수 있는
Java 라이브러리라고 한다
(진짜 지식없어도 됨;)

특징

  1. 간편하게 단방향 , 양방향 암호화 기술제공
  2. 문자 집합에 제약없이 사용 가능함

Jasypt

PBEWithMD5AndDES 암호화 방식을 사용하는 경우 브라우저에서 간단하게 암호화,복호화 할 수 있다.


라이브러리 추가

implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>3.0.5</version>
</dependency>

암호화 알고리즘 (Algorithm) : 3.0 버전 부터 기본 알고리즘이 PBEWithMD5AndDES 에서 PBEWITHHMACSHA512ANDAES_256로 변경 되었고 한다


PBEWithMD5AndDES

  1. Config 클래스 생성
@EnableEncryptableProperties
public class JasyptConfig {

    @Value("${jasypt.encryptor.password}")
    private String key; // 암호화 시 사용될 키 값


    @Bean("jasyptEncryptorDES")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(key); // 암호화키
        config.setAlgorithm("PBEWithMD5AndDES"); // 알고리즘
        config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
        config.setPoolSize("1"); // 인스턴스 pool
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
        config.setStringOutputType("base64"); //인코딩 방식
        encryptor.setConfig(config);
        return encryptor;
    }


}

2. JasyptConfigTest - 속성 값 암호화

public class JasyptConfigTest {

    @Test
    void stringEncryptor() {
        String url = "db_url";
        String username = "admin";
        String password = "12341234";

        System.out.println(jasyptEncoding(url));
        System.out.println(":::::   username : "+jasyptEncoding(username));
        System.out.println(":::::   password : "+jasyptEncoding(password));
    }

    public String jasyptEncoding(String value) {

        String key = "han";
        StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
        pbeEnc.setAlgorithm("PBEWithMD5AndDES");
        pbeEnc.setPassword(key);
        return pbeEnc.encrypt(value);
    }

Test 문으로 암호화된 값을 뽑아내지 않아도 정말정말 쉽게

해당 사이트에서도 암호화 진행이 가능하다

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

spring.datasource.replica.username=admin
spring.datasource.replica.password=ENC(ipO5Xcn2c1tKCf2jvbNqhxGmKTzxdZBD)
ENC(암호화된 데이터)

3. 암호화 키 값 세팅

3 - 1 VM options에 key추가

-Djasypt.encryptor.password=sample

3 - 2 application.properties key 값 세팅

jasypt.encryptor.password=sample

다들 DB 해킹당하는 일 없기를


참고 사이트

에러
[error] application.properties 암호화 Jasypt 발생한 문제


[스프링부트] Spring Boot 설정파일(yaml, properties) 암호화 (with Jasypt)

Spring Boot 설정파일 암호화

yml 암호화를 해보자(feat. jasypt)

유튜브 개인적으로 강추함

0개의 댓글