Tech/Spring

[Spring] jasypt로 암호화하기, docker, ec2 및 CI/CD 연동하기

0m1n 2023. 1. 19. 22:21
728x90
반응형

스프링 세팅 시 민감한 정보들이 많다. (rds db 주소 등)

jasypt로 간편하게 암호화 할 수 있다!!

 

1. build.gradle 설정

아래 부분을 추가해준다.

testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4'

2. Jasypt config 설정

필자는 JasyptConfig로 네이밍해 설정하였다. 여기서 중요한 부분은 encryptKey 은 노출하면 안된다!

package com.mews.mews_backend.global.config;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class JasyptConfig {

    @Value("${jasypt.encryptor.password}")
    private String encryptKey;

    @Bean("jasyptStringEncryptor")
    public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(encryptKey);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

3. 암호화, 복호화 및 encryptKey 생성

위와 같이 기본 세팅을 한 후

https://www.devglan.com/online-tools/jasypt-online-encryption-decryption

에 접속해 암호화/복호화를 진행하자!

test_lock : 암호화할 부분

serect_key : encryptKey에 해당하는 부분이다. 필자는 랜덤으로 문자를 생성해 encryptKey로 설정하였다.

4. 암호화 적용 및 encryptKey 환경 변수 설정

이제 가릴 부분을 ENC(암호화된 String)으로 교체해주자!

암호화 키 환경 변수 설정하는 방법은 여러가지가 있는데,

우선 로컬에서 테스트할때는 어플리케이션 구성설정 - vm옵션에 아래와 같이 입력해주는 방법이 있다.

5. docker-compose에서 encryptKey 설정

docker에서는 환경변수를 어떻게 넣어줄까?

아래 environment에서 변수 설정을 해주면 된다!

version: "3"
services:
  spring:
    container_name: spring
    image: test_image
    expose:
      - "8080"
    ports:
      - "8080:8080"
    environment:
      JASYPT_ENCRYPTOR_PASSWORD: test_key
728x90
반응형