gi_dor

스프링부트 설정파일(application.properties) 암호화 (Jasypt) 본문

Back_End/SpringBoot

스프링부트 설정파일(application.properties) 암호화 (Jasypt)

기돌 2024. 5. 2. 17:08
728x90

 

 

application.yml 이나 application.properties 파일에 DB의 비밀번호 또는 키 값을 명시해두는 경우 데이터들이 외부로 노출되어 보안에 문제가 생길수 있다

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

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

이후에 컴퓨터 포맷을 하는 상황이 올수도 있고 해서 암호화 세팅을 해두려고 한다.


Jasypt

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

특징 

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

 

 

http://www.jasypt.org/

 

Jasypt: Java simplified encryption - Jasypt: Java simplified encryption - Main

Jasypt 1.9.3 RELEASED! (May 25th, 2019) [DOWNLOAD and ChangeLogs] [WHAT'S NEW IN JASYPT 1.9] Java Simplified Encryption Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and wi

www.jasypt.org

 

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 클래스 생성

@Configuration
@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);
    }


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

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

 

Programming Blog Article Feeds as per your Interest | DevGlan

Best programming article feeds as per your Interest on different technologies. Subscribe to any technology and explore the best articles from around the web.

www.devglan.com

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 해킹당하는 일 없기를

 

https://gi-dor.tistory.com/251

 

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

https://gi-dor.tistory.com/250 스프링부트 설정파일(application.properties) 암호화 (Jasypt)application.yml 이나 application.properties 파일에 DB의 비밀번호 또는 키 값을 명시해두는 경우 데이터들이 외부로 노출되

gi-dor.tistory.com

 

https://goddaehee.tistory.com/321

 

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

[스프링부트] Spring Boot 설정파일 암호화 (with Jasypt) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Spring Boot 설정파일 암호화 하기 ] 입니다. : ) ※ application.yml 이나 application.properties 파일에 DB의 비

goddaehee.tistory.com

https://notavoid.tistory.com/14

 

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

yml나 properties에 데이터베이스 접속정보, JWT 토큰 비밀번호를 기입 해놓을 것 이다 로컬에서는 상관없겠지만 github에 올려서 사용 시에 유출되면 악의적으로 사용이 가능해진다. 저런 취약한 정

notavoid.tistory.com

https://www.youtube.com/watch?v=B36xjHpU894

 

728x90