본문 바로가기

IT, 인터넷/JAVA, 스프링부트

스프링부트 yml, properties 암호화 하기

반응형

yml, properties 파일을 사용하다가 보면 중요한 비밀번호 라든디 디비 url등 보이지 않았으면 하는게 있습니다.

그래서 yml, properties 파일을 암호화를 해서 민감한 정보를 특수문자로 변경해서 관리를 할수가 있습니다.

이게 jasypt, bouncycastle의 패키지를 사용을 해서 할수 있습니다.

스프링이나 스프링부트에서는 mavenrepository에서 패키지를 검색을 해서 찾을수가 있습니다.

https://mvnrepository.com/

mavenrepository에서 검색을 해서 패키지를 찾아서 하는 방법이 있구요.

pom.xml

<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

 

pom.xml에 해당 dependency를 추가를 합니다.

 

gradle 방식

gradle방식은 build.gradle에 추가를 하면 되고 추가를 한후에는 해당 프로젝트에 마우스 오른쪽을 눌러서

Gradle > Refresh Gradle Project 를 꼭 클릭을 해주어야 사용이 가능 합니다.

build.gradle

// https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter
implementation group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.3'

// https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.68'

 

해당 내용을 build.gradle에 추가를 합니다.

그러면 yml, properties에 암호화를 할 준비가 끝났습니다.

이제 config파일과 yml이나 properties에 설정을 해주면 암호화를 사용 가능 합니다.

PropertyEncyptConfiguration.java

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;

@Configuration
@EnableEncryptableProperties
public class PropertyEncyptConfiguration {

@Bean("encryptorBean")
    public PooledPBEStringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        encryptor.setProvider(new BouncyCastleProvider());
        encryptor.setPoolSize(2);
        encryptor.setPassword("test");
        encryptor.setAlgorithm("test-key-sdfsdfw");
        return encryptor;
    }
}

 

apllication.yml

jasypt:
  encryptor:
    bean: encryptorBean

 

application.properties

jasypt.encryptor.bean=encryptorBean

 

위와 같이 config파일과 yml, properties에 해당 빈을 추가를 해주면 끝입니다.

이제 암호화를할 test파일을 만들어야 합니다.

JasyptTest.java

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;

 

public class JasyptTest {

 

    public static void main(String args[]) {

        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();

        encryptor.setProvider(new BouncyCastleProvider());

        encryptor.setPoolSize(2);

        encryptor.setPassword("test");

        encryptor.setAlgorithm("test-key-sdfsdfw");

 

        String plainText = "test";

        String encryptedText = encryptor.encrypt(plainText);

        String decryptedText = encryptor.decrypt(encryptedText);

        System.out.println("Enc:"+encryptedText+", Dec:"+decryptedText);

    }

}

 

위에 테스트 파일을 실해을 하면 enc, dec가 나오는데 여기서 enc를 가져다가 yml, properties에 추가를 해주면 됩니다.

yml

password: ENC(encstring)

properties

password=ENC(encstring)

 

이걸 사용을 하면 민감한 정보를 암호화를 해서 외부에 유출이 되는걸 방지를 할수 있습니다.

 

반응형