개발/Spring

Spring Boot와 Jasypt로 비밀번호 암호화 및 복호화 설정

피터JK 2025. 3. 17. 16:16
728x90

Jasypt를 사용하여 Spring Boot에서 DB 비밀번호를 암호화하여 안전하게 설정하는 방법

이 방식은 비밀번호를 ENC(...) 형식으로 암호화하여 설정하고, Spring Boot 애플리케이션 실행 시 자동으로 복호화하는 방법이다.

1. Jasypt 의존성 추가

먼저, pom.xml에 Jasypt Spring Boot Starter 의존성을 추가합니다. 이를 통해 Spring Boot에서 Jasypt 라이브러리를 쉽게 사용할 수 있다.

<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

2. Jasypt 암호화된 DB 비밀번호 설정

DB 비밀번호를 암호화하여 ENC(...) 형식으로 설정해야 합니다. 이를 위해 Jasypt CLI를 사용하여 비밀번호를 암호화하거나, Java 코드를 통해 암호화할 수 있다.

2.1. Jasypt CLI를 이용한 암호화

  1. Jasypt CLI 다운로드 및 설치
    • Jasypt CLI는 Jasypt 공식 웹사이트에서 다운로드할 수 있다.
    • 다운로드 후 encrypt.sh 또는 encrypt.bat을 실행할 수 있다.
  2. 암호화 명령어 실행
    • 암호화할 비밀번호와 암호화 키를 입력한다.
    encrypt.sh input="mysecretpassword" password="encryptionkey"
    • 이 명령어를 실행하면 암호화된 값이 출력된다. 예시 출력:
    ENC(9V3f0V9jm+s8W8ObG98G7g==)

2.2. Java 코드로 암호화하기

Java로 암호화하려면 Jasypt 라이브러리를 사용하여 비밀번호를 암호화할 수 있다. 다음은 Jasypt를 사용하여 비밀번호를 암호화하는 예시이다.

import org.jasypt.util.text.AES256TextEncryptor;

public class EncryptPassword {
    public static void main(String[] args) {
        AES256TextEncryptor encryptor = new AES256TextEncryptor();
        encryptor.setPassword("encryptionkey");  // 암호화 키
        String encryptedPassword = encryptor.encrypt("mysecretpassword");
        System.out.println("Encrypted password: ENC(" + encryptedPassword + ")");
    }
}

이 코드에서 encryptionkey를 사용하여 mysecretpassword를 암호화하고, 출력된 값을 ENC(...) 형식으로 사용한다.

3. application.properties에 설정

암호화된 비밀번호를 application.properties 파일에 설정합니다. 이때, ENC(...) 형식으로 암호화된 비밀번호를 입력한다.

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myuser
spring.datasource.password=ENC(9V3f0V9jm+s8W8ObG98G7g==)  # 암호화된 비밀번호

4. Jasypt 암호화 키 설정

Spring Boot에서 Jasypt가 암호화된 비밀번호를 복호화할 수 있도록 암호화 키를 설정해야 합니다. 이 설정은 application.properties 파일에 jasypt.encryptor.password 프로퍼티로 설정할 수 있다.

jasypt.encryptor.password=encryptionkey  # 암호화 키

또는, 환경 변수를 사용하여 설정할 수도 있다.

export JASYPT_ENCRYPTOR_PASSWORD=encryptionkey

application.properties에서 이 값을 참조하려면 다음과 같이 작성한다.

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}

5. Spring Boot 애플리케이션 실행

애플리케이션을 실행할 때, Jasypt는 ENC(...) 형식의 암호화된 비밀번호를 자동으로 복호화한다. 복호화된 비밀번호는 spring.datasource.password에 설정된 값으로 사용되어 데이터베이스 연결에 활용된다.

java -Djasypt.encryptor.password=encryptionkey -jar your-application.jar

6. 데이터베이스 연결 설정

Spring Boot에서 DB 연결을 설정할 때, 복호화된 비밀번호는 spring.datasource.password로 사용됩니다. 다음과 같이 application.properties 파일에 설정할 수 있다.

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myuser
spring.datasource.password=${spring.datasource.password}  # 복호화된 비밀번호 사용

7. 추가적인 설정 (선택사항)

  • Jasypt 암호화 키를 환경 변수로 설정: 위에서 설명한 것처럼 암호화 키는 환경 변수로 설정하여, 보안상 안전하게 관리할 수 있다.
  • @EnableEncryptableProperties 활성화: Jasypt 3.0.0 이상에서는 @EnableEncryptableProperties 어노테이션을 사용하여 설정 파일에서 ENC(...) 형식의 암호화된 값을 자동으로 처리할 수 있다.
import org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JasyptConfig {

    @Bean
    public static EncryptablePropertyPlaceholderConfigurer encryptablePropertyPlaceholderConfigurer() {
        return new EncryptablePropertyPlaceholderConfigurer();
    }
}

요약

  1. Jasypt 의존성 추가: jasypt-spring-boot-starter를 pom.xml에 추가.
  2. 암호화: Jasypt CLI 또는 Java로 비밀번호를 암호화하여 ENC(...) 형식으로 저장.
  3. application.properties 설정: 암호화된 비밀번호를 spring.datasource.password에 설정.
  4. 암호화 키 설정: jasypt.encryptor.password로 암호화 키 설정.
  5. 애플리케이션 실행: -Djasypt.encryptor.password 플래그로 암호화 키를 전달하여 복호화 후 DB 연결.

이렇게 설정하면 암호화된 DB 비밀번호를 안전하게 관리할 수 있다.

728x90