티스토리 뷰

1.운영체제 및 소프트웨어 버전


 

  •  Version
    • OS: Windows 11
    • Java: 11
    • Spring Boot: 2.7.1
    • jasypt: 3.0.4

 

2.시스템 환경변수를 이용한 Key(Password) 보관


 

Key(Password) 란, jasypt 암/복호화에 사용하는 키를 의미한다.
보관 방법으로 클래스 안에 Key(Password) 세팅 후 난독화하거나
시스템 환경변수에 세팅하고 코드에서 호출하는 방법 등이 있다.

시작 > 시스템 환경 변수 편집 > 시스템 속성(환경 변수) > 새로 만들기 > Key, Value 입력

 

3.jasypt dependency 추가


 

Spring Boot, jasypt 버전에 따라 호환 이슈에 대한 글이 종종 보인다.
버전을 반드시 확인하고 진행해야한다.

 

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

4.jasypt Configuration Class 생성


 

jasypt 구현 코드를 Bean 등록 후 application 실행 시 properties 파일에서
기본값으로 설정된 prefix = ENC(, suffix = )에 해당하는 문자열을 찾고
application 이 정상적으로 구성되도록 () 안에 내용을 복호화 한다.

 

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
    private static final String PASSWORD = "시스템 환경 변수 Key";

    @Bean("jasyptStringEncryptor")
    StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        final String PASSWORD = System.getenv(PASSWORD);
        config.setPassword(PASSWORD);
        config.setAlgorithm("PBEWithMD5AndDES");
        // 반복 해싱 횟수
        config.setKeyObtentionIterations(1000);
        config.setPoolSize(1);
        // JVM 보안 프레임워크에 사전 등록된 공급자 명
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

 

시스템 환경 변수 편집에서 생성한 Key(Password) 가져오기

 

private static final String PASSWORD = "시스템 환경 변수 Key";
final String PASSWORD = System.getenv(PASSWORD);
System.getenv(PASSWORD);

 

5.properties 파일 안에 암호화 대상 문자열


 

datasource.username/password 처럼 암호화가 필요한 대상은 문자열을 암호화 후 6번과 같이 적용해야 하는데
방법은 두 가지가 있으며 아래와 같다

첫 번째로 4번에서 생성한 빈의 encryptor.encrypt(“plain text”) 함수를 호출하여 암호화 문자열을 얻을 수 있고
두 번째로는 URL(free) 이용하는 방법으로 아래 이미지와 같이 적용하여 암호화 문자열을 얻을 수 있다.

 

 

6.암호화한 문자열 적용


 

properties file or yaml(yml) file 안에 아래와 같이 적용할 수 있다.

spring.datasource.admin.username=ENC(암호화된 문자열)
spring.datasource.admin.password=ENC(암호화된 문자열)
spring:
  datasource:
    admin:
      username: ENC(암호화된 문자열)
      password: ENC(암호화된 문자열)

 

jasypt reference

 

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