Spring Boot에서 Jasypt를 활용한 설정 파일 암호화

Spring Boot 프로젝트에서 Jasypt를 사용하여 설정 파일의 민감 정보를 암호화하는 방법을 알아봅니다.

배경

데이터베이스 연결 정보와 같은 민감한 데이터를 설정 파일에 평문으로 저장하면 보안 위험이 발생할 수 있습니다. 이를 해결하기 위해 Jasypt 라이브러리를 사용하여 이러한 정보를 암호화할 수 있습니다. 아래에서는 Spring Boot 프로젝트에서 Jasypt를 설정하고 사용하는 단계를 설명합니다.

Jasypt 사용 방법

1. 의존성 추가

pom.xml 파일에 다음 의존성을 추가합니다.

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

2. 암호화 키 설정

application.properties 파일에 임시 암호화 키를 설정합니다. 이후 암호화 작업이 완료되면 해당 키는 삭제해야 합니다.

# 암호화에 사용될 키
jasypt.encryptor.password=Zxq98sdfgQwErtYUioPmNbvXc1234567890
주의: 이 키는 복잡하게 설정해야 하며, 소스 코드나 설정 파일에 노출되지 않도록 주의하세요.

3. 암호화된 문자열 생성

다음은 암호화된 문자열을 생성하는 예제 코드입니다.

import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SecurityTest {

    @Autowired
    private StringEncryptor encryptor;

    @Test
    public void generateEncryptedStrings() {
        System.out.println("암호화된 URL: " + encryptor.encrypt("데이터베이스 연결 URL"));
        System.out.println("암호화된 사용자명: " + encryptor.encrypt("사용자 이름"));
        System.out.println("암호화된 비밀번호: " + encryptor.encrypt("비밀번호"));
    }
}
위 코드를 실행하면 암호화된 값들이 콘솔에 출력됩니다. 예시 출력:

암호화된 URL: aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890
암호화된 사용자명: zYxWvUtSrQpOnMlKjIhGfEdCbA987654321
암호화된 비밀번호: qWeRtYuIoPaSdFgHjKlXcVbNm1234567890

4. application.properties 수정

암호화된 값을 설정 파일에 적용합니다. ENC() 함수를 사용하여 암호화된 값을 지정합니다.

spring.datasource.url=ENC(aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890)
spring.datasource.username=ENC(zYxWvUtSrQpOnMlKjIhGfEdCbA987654321)
spring.datasource.password=ENC(qWeRtYuIoPaSdFgHjKlXcVbNm1234567890)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

5. 암호화 키 전달

Spring Boot 애플리케이션을 실행할 때 암호화 키를 매개변수로 전달해야 합니다.

mvn spring-boot:run -Dspring-boot.run.arguments=--jasypt.encryptor.password=Zxq98sdfgQwErtYUioPmNbvXc1234567890

6. 개발 및 테스트 환경에서의 주의사항

개발 및 테스트 과정에서는 편의를 위해 application.properties 파일에서 암호화 키를 유지할 수 있지만, 소스 제어 시스템(GitHub 등)에 커밋하기 전에는 반드시 제거해야 합니다.

태그: Spring Boot Jasypt Java Configuration

8월 2일 15:14에 게시됨