gi_dor

[error] application.properties 암호화 Jasypt 발생한 문제 본문

Back_End/Issue

[error] application.properties 암호화 Jasypt 발생한 문제

기돌 2024. 5. 2. 17:06
728x90

https://gi-dor.tistory.com/250

 

스프링부트 설정파일(application.properties) 암호화 (Jasypt)

application.yml 이나 application.properties 파일에 DB의 비밀번호 또는 키 값을 명시해두는 경우 데이터들이 외부로 노출되어 보안에 문제가 생길수 있다실제로 지난 프로젝트 당시 DB에 저장된 데이터를

gi-dor.tistory.com

 

🔒 상황

기존에 설정한 application properties 암호화 설정에서 

DB 이중화로 인해 master 와 replica 로 구분 후에  발생한 문제에 대해 기록하려고 한다

Application 실행 시 에 발생하는 문제... 

 


 

🔒 원하는 결과 

spring.datasource.master.password  에 바인딩되어 애플리케이션이 실행되야한다

 


 

🔒 해결방법

Spring 애플리케이션이 실행될 때 spring.datasource.master.password 속성을 바인딩할 수 없다는 것을 나타낸다
애플리케이션의 구성 파일에서 설정이 잘못되었거나 필요한 속성이 누락되었을 때 발생한다



1️⃣ 구성 파일 확인: 애플리케이션의 application.properties 또는 application.yml과 같은 구성 파일을 확인spring.datasource.master.password 속성이 올바른지 확인하기

2️⃣ 패스워드 설정: spring.datasource.master.password 속성이 데이터베이스 연결에 필요한 패스워드를 제공하는지 확인

3️⃣ 데이터베이스 구성 확인: 데이터베이스 서버가 실행 중이고 애플리케이션이 올바른 데이터베이스에 연결하려는지 확인

4️⃣ 스프링 부트 의존성 확인: 필요한 스프링 부트 의존성이 제대로 설정되었는지 확인.
종속성이 올바르게 해결되지 않으면 Spring이 데이터베이스 속성을 바인딩하는 데 문제가 발생할 수 있다고 한다.

 

    @Bean("jasyptEncryptorDES")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(key); // 암호화키
        config.setAlgorithm("PBEWithMD5AndDES"); // 알고리즘
        config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
        config.setPoolSize("1"); // 인스턴스 pool
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
        config.setStringOutputType("base64"); //인코딩 방식
        encryptor.setConfig(config);
        return encryptor;
    }

@Bean("jasyptEncryptorDES") 이렇게 Jasypt 라이브러리의 암호화 방법 DES를 사용하는 Encryptor를
나타내는 빈등록 까지 했는데 나한테 왜그런걸까 ..

 

JasyptEncryptorConfigurationProperties .class

Jasypt 라이브러리를 사용하여 스프링 부트 애플리케이션에서 문자열을 암호화하는 데 사용되는 기본 빈의 이름을 지정하는 데 사용된다  →  jasyptStringEncryptor 가 기본 default 이름 이라는 뜻이다

기본적으로 Jasypt Spring Boot Starter는 jasyptStringEncryptor 라는 이름의 빈을 사용하여 문자열을 암호화하는데
기본 빈의 이름을 변경할 수 있도록 하는 옵션을 제공한다고 한다.

 bean 필드에 지정된 이름으로 빈을 재정의할 수 있으며.  암호화 빈의 이름을 변경할 수 있다

예를 들어, 이 필드를 " jasyptEncryptorDES "와 같이 설정하면
스프링 부트 애플리케이션은 "jasyptEncryptorDES" 라는 이름의 빈을 찾아서 문자열을 암호화할 것이다

위에서 Config 클래스에 @Bean("jasyptEncryptorDES") 이렇게 등록 했기 때문에 default 이름이 아닌 재정의된 이름으로 설정해서 그렇다고 한다. 그러므로 application.properties 에서 프로퍼티 암호화설정 빈을 등록 해줘야한다

 

## 프로퍼티 암호화 설정
jasypt.encryptor.bean=jasyptEncryptorDES

 

사실 가장 쉬운 방법은 이렇게 빈의 추가적인 이름을 없애버리면 위에 application.properties 값을 설정하지 않아도된다

    @Bean
    public StringEncryptor stringEncryptor() { }
728x90