인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của mrpark219

câu hỏi đã được viết

Spring Boot với Kotlin cho người mới bắt đầu - Xây dựng trang web portfolio của riêng bạn

[Thực hành] Xây dựng project với Docker

Docker Compose 배포 시 Jasypt 암호화된 속성 복호화 문제 해결 방법

Viết

·

126

·

Đã chỉnh sửa

1

문제

Docker Compose 환경에서 애플리케이션 배포 후, 데이터베이스에 연결할 때 암호화된 설정값을 복호화하지 못해 연결에 실패하는 문제.


원인

@EnableEncryptableProperties 어노테이션을 누락한 경우, 애플리케이션이 암호화된 속성을 복호화하지 않고 데이터를 사용하려고 시도합니다. 이로 인해 암호화된 패스워드로 데이터베이스에 접속하려 시도하면서 연결 오류가 발생하고, 컨테이너가 종료됩니다.


해결 방법

JasyptConfiguration.kt 파일에 @EnableEncryptableProperties 어노테이션을 추가합니다.

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties
import org.jasypt.encryption.StringEncryptor
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
@EnableEncryptableProperties // 추가해주세요.
class JasyptConfiguration {

    @Bean("jasyptStringEncryptor")
    fun stringEncryptor(): StringEncryptor {

        val encryptor = PooledPBEStringEncryptor()
        val config = SimpleStringPBEConfig()
        config.password = System.getenv("jasypt.encryptor.key")
        config.algorithm = "PBEWithMD5AndDES"
        config.setKeyObtentionIterations("1000")
        config.setPoolSize("1")
        config.providerName = "SunJCE"
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator")
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator")
        config.stringOutputType = "base64"
        encryptor.setConfig(config)

        return encryptor
    }
}

예제 소스 코드 Github에서 확인하기

kotlinmysqldockerspring-bootjpa

Câu trả lời 2

0

infomuscle님의 프로필 이미지
infomuscle
Người chia sẻ kiến thức

안녕하세요 정보근입니다:)

 

질문이 아닌 정보 공유성으로 글 올려주셨군요.

 

좋은 내용으로 글 작성해주셔서 감사드리고, 이후 강의 업데이트에 관련 내용도 반영해 보겠습니다.

 

 

다만 제가 데모 프로젝트를 작업할 때는 @EnableEncryptableProperties 어노테이션을 추가하지 않아도 정상 동작이 됐는데,

 

왜 어노테이션 없이 암복호화가 잘 동작하지 않았는지 궁금해서 확인을 좀 해봤습니다.

 

올려주신 깃허브 리포지토리를 보면 build.gradle.kts 파일에서

com.github.ulisesbocchio:jasypt-spring-boot:3.0.5를 의존하고 있더라고요.

데모 프로젝트에서는 com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5를 사용했습니다.

 

두 라이브러리의 차이를 확인하기 위해 소스를 찾아보니 spring-boot-start에는 AutoConfiguration 클래스가 추가되어 있더라고요.

@EnableEncryptableProperties 어노테이션을 열어보면 EnableEncryptablePropertiesConfiguration.class를 Import 하는데요.

아래 링크를 보시면 똑같은 기능을 하는 클래스가 있는 것을 확인하실 수 잇습니다.

 

https://github.com/ulisesbocchio/jasypt-spring-boot/tree/master/jasypt-spring-boot-starter/src/main/java/com/ulisesbocchio/jasyptspringbootstarter

 

그래서 spring-boot-starter를 사용하면 별도의 활성화 없이 자동으로 암복호화가 활성화 되는 것이었네요.

 

 

좋은 내용 공유해주셔서 다시 한 번 감사드립니다!

0

communityai8509님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. mrpark219님.

Docker Compose 환경에서 애플리케이션 배포 시, Jasypt를 이용해 암호화된 설정값을 복호화할 수 없는 문제는 흔히 발생하는 상황인데요, @EnableEncryptableProperties 어노테이션 미포함으로 인해 문제 발생이 됩니다.

문제를 해결하기 위해서는 주요 애너테이션을 추가하여 애플리케이션이 실행 시에 암호화된 값을 올바르게 복호화할 수 있도록 설정해야 합니다. 이를 해결하기 위해 JasyptConfiguration.kt 파일에 @EnableEncryptableProperties 어노테이션을 추가하셔야 합니다.

이 코드는 애플리케이션이 시작될 때, Jasypt가 환경 변수를 통해 암호화된 값을 복호화할 수 있도록 설정하는 예시입니다. 추가적으로, 로컬 환경에서 Jasypt 암호화 키를 환경 변수로 설정하실 때는 ‘jasypt.encryptor.key’가 반드시 올바르게 설정되어 있어야 합니다.

이런 설정을 통해 Docker Compose에서 데이터베이스 연결 등의 민감한 정보를 안전하게 관리할 수 있으며, 암호화된 설정을 복호화하여 사용할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của mrpark219

câu hỏi đã được viết

Đặt câu hỏi