Jasypt YML 암호화

application.yml 민감 정보 Jasypt 암호화 적용 방법 및 Jenkins 주입 패턴

마지막 수정: 2026-06

Jasypt YML 암호화

민감 정보(DB 비밀번호, API 키 등)를 application.yml에 평문으로 저장하지 않고 Jasypt로 암호화하여 관리한다.


의존성 추가

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

적용 방식

YML 내 민감 값을 ENC(암호화된값) 형식으로 기입한다.

spring:
  datasource:
    url: jdbc:oracle:thin:@{host}:1521:{sid}
    username: ${DB_USERNAME}
    password: ENC(xxxxxxxxxxxxxxxxxxxxxxxx)

jwt:
  secret: ENC(yyyyyyyyyyyyyyyyyyyyyyyy)

Spring Boot 기동 시 Jasypt가 ENC(...) 값을 자동으로 복호화한다.


Config 클래스

@Configuration
@EnableEncryptableProperties
public class JasyptConfig {

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor(
            @Value("${jasypt.encryptor.password}") String password) {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

값 암호화 (CLI)

# jasypt-cli 사용 예시
java -cp jasypt-1.9.3.jar \
  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \
  input="평문비밀번호" \
  password="복호화키" \
  algorithm="PBEWithMD5AndDES"

OUTPUT 값을 ENC(...) 안에 기입한다.


Jenkins 배포 시 키 주입

복호화 키는 코드나 YML에 포함하지 않고 Jenkins가 JVM 인수로 주입한다.

# Jenkins Pipeline ExecStart 예시
java -Djasypt.encryptor.password=${JASYPT_KEY} -jar {서비스명}.jar

JASYPT_KEY는 Jenkins Credentials에 등록하여 파이프라인에서 주입한다.


로컬 개발 환경

로컬에서는 application-local.yml에 평문 값을 사용하거나, 환경변수로 주입한다.

# application-local.yml
jasypt:
  encryptor:
    password: local-dev-key

또는 IntelliJ Run Configuration에 VM 옵션으로 추가:

-Djasypt.encryptor.password=local-dev-key

application-local.yml은 git 커밋에서 제외한다. (.gitignore 필수)


체크리스트

  • [ ] jasypt-spring-boot-starter 의존성 추가
  • [ ] JasyptConfig Bean 등록
  • [ ] 민감 값 암호화 후 ENC(...) 형식으로 YML 기입
  • [ ] Jenkins Credentials에 복호화 키 등록
  • [ ] application-local.yml .gitignore 처리
  • [ ] 로컬 실행 시 -Djasypt.encryptor.password JVM 옵션 확인