🌱JAVA/Spring

[Spring] 설정 파일 값 암호화 및 적용하기 (feat. Jasypt)

뉴발자 2024. 6. 25.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

개요

프로그램을 개발한 후 프로젝트를 외부에 배포하기 위해 회사 내부 정보를 암호화해야 했다.

 

우선 가장 대중적이고 래퍼런스가 많은 Jasypt 라이브러리를 사용해 DB 접속 정보를 암호화하기로 했다.

 

 

의존성 추가

라이브러리

https://github.com/ulisesbocchio/jasypt-spring-boot

 

GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot

Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.

github.com

 

Gradle 의존성 추가
필자는 gradle을 사용하기 때문에 다음과 같이 build.gradle 파일에 의존성을 추가했다.

dependencies {
  ...
  implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
}

 

Mavan을 사용한다면 위 라이브러리 사이트의 설명을 참고하면 된다.

 

 

Config 설정

프로젝트 내에 JasyptConfig.java 파일을 만들어주고 코드를 입력해준다.

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
  @Bean("jasyptEncryptorDES")
  public StringEncryptor stringEncryptor() {
    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    SimpleStringPBEConfig config = new SimpleStringPBEConfig();
    
    config.setPassword("");
    config.setAlgorithm("PBEWithMD5AndDES");
    config.setKeyObtentionIterations("1000");
    config.setPoolSize("1");
    config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
    config.setStringOutputType("base64");
    
    encryptor.setConfig(config);
    
    return encryptor;
  }
}

 

 • config.setPassword - 암호화 시 key값으로 사용할 문자열

 

 • config.setAlgorithm - 암호화 시 사용할 알고리즘

 

 • config.setKeyObtentionIterations - 해시 반복 횟수

 

 • config.setSaltGeneratorClassName - 정렬에 사용할 라이브러리

 

 • config.setStringOutputType - 반환되는 암호화 문자열 타입

 

 

설정 파일에 암호화 값 적용

yml 파일에 암호화된 값을 적용하려면 'ENC(암호화된 값)' 형식으로 입력해주면 된다.

# jasypt를 사용하기 위한 기본 설정
jasypt:
  encryptor:
    password: ${jasyptPassword}
    ivGeneratorClassname: org.jasypt.iv.RandomIvGenerator
    bean: jasyptEncryptorDES
        
myValue:
  hi: ENC(암호화된 값)

 

그렇다면 암호화된 값을 어떻게 얻어야할 지 고민이 될 것이다.

 

 

암호화된 값 출력하기

가장 간단한 방법으로는 Test 코드를 작성해서 암호화된 값을 얻는 방법이다.

 

다음과 같이 테스트 코드를 작성해서 console창에 출력된 암호화된 값을 설정 파일에 추가해주면 된다.

@SpringBootTest
class TestApplicationTests {
  // 암호화 키 값
  public String key = "";

  @Test
  void stringEncryptor() {
    // 암호화할 문자열
    String text = "";

    System.out.println("Encrypted Text : " + jasyptEncoding(text));
  }

  public String jasyptEncoding(String value) {
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    
    encryptor.setAlgorithm("PBEWithMD5AndDES");
    encryptor.setPassword(key);
    
	return encryptor.encrypt(value);
  }
}

 

 

참고 사이트

https://github.com/ulisesbocchio/jasypt-spring-boot

 

GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot

Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.

github.com

 

https://velog.io/@donkey8/Application.properties-%EC%95%94%ED%98%B8%ED%99%94%ED%95%98%EA%B8%B0

 

Application.properties 암호화하기

초보 개발자로서 마주치는 당연한 문제 중 하나는 local에서 혼자 개발 할때와 실무에서 개발하는 환경이 다르다는 점이다.local에서 혼자 개발할때야.. 비밀번호든 DB경로든 내맘대로고 localhost 주

velog.io

 

 

 

 

 

 

 

 

 

 

728x90

댓글