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를 이용한 암호화
- Jasypt CLI 다운로드 및 설치
- Jasypt CLI는 Jasypt 공식 웹사이트에서 다운로드할 수 있다.
- 다운로드 후 encrypt.sh 또는 encrypt.bat을 실행할 수 있다.
- 암호화 명령어 실행
- 암호화할 비밀번호와 암호화 키를 입력한다.
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();
}
}
요약
- Jasypt 의존성 추가: jasypt-spring-boot-starter를 pom.xml에 추가.
- 암호화: Jasypt CLI 또는 Java로 비밀번호를 암호화하여 ENC(...) 형식으로 저장.
- application.properties 설정: 암호화된 비밀번호를 spring.datasource.password에 설정.
- 암호화 키 설정: jasypt.encryptor.password로 암호화 키 설정.
- 애플리케이션 실행: -Djasypt.encryptor.password 플래그로 암호화 키를 전달하여 복호화 후 DB 연결.
이렇게 설정하면 암호화된 DB 비밀번호를 안전하게 관리할 수 있다.
'개발 > Spring' 카테고리의 다른 글
| Spring Interceptor 기반 중복방지 (0) | 2025.09.12 |
|---|---|
| 스프링에서 생성자 주입(Constructor Injection)을 권장 (0) | 2025.09.12 |
| Spring Boot에서 JSP 페이지 접근 시 "Path with WEB-INF or META-INF" 경고 해결 방법 (0) | 2025.02.25 |
| Spring Framework 및 Spring Boot 버전에 따른 지원 Java 버전 (0) | 2025.02.24 |
| @Mock vs @MockBean 테스트 차이 (0) | 2025.02.19 |