Jasypt 사용법 - 프로퍼티 파일 암호화

LJH·2021년 12월 4일
0
post-thumbnail

1. Jasypt란?

  • 프로퍼티 파일에 노출되는 중요 정보들을 암호화 해주는 라이브러리

  • 예로 프로퍼티 파일에서 DB password 라던지 aws의 secret-key 등을 암호화 하는데 사용한다.


2. Jasypt사용

2-1. 의존성 추가

  • build.gradle
dependencies {
	implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'
}

2-2. 로컬 환경변수에 비밀번호 설정 (Window 기준)

  • 프로젝트 내부에 자바파일에다가 비밀번호를 하드코딩하게되면 암호화 한 값들이 복호화 되기 때문에 암호화 하는 의미가 없다.

  • 따라서 환경변수에 비밀번호를 설정하고 자바로 환경변수 값을 가져온다.

  • 변수 이름은 원하는대로 지정하고, config 파일에서 매핑만 해주면 된다.

  • 변수 값에 비밀번호를 적어준다.

  • 환경변수를 적용하고 인텔리제이를 재실행 해야 적용된다.
    또는 컴퓨터를 재부팅 해야 한다.

2-3. 프로퍼티 파일

  • JasyptConfig
@Configuration
public class JasyptConfig {

	@Value("${JASYPT_PASSWORD}")
	String password;

	@Bean(name = "jasyptStringEncryptor")
	public StringEncryptor stringEncryptor() {

		PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		SimpleStringPBEConfig config = new SimpleStringPBEConfig();
		config.setPassword(password); // 암호화할 때 사용하는 키
		config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 알고리즘
		config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
		config.setPoolSize("1"); // 인스턴스 pool
		config.setProviderName("SunJCE");
		config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
		config.setStringOutputType("base64"); //인코딩 방식
		encryptor.setConfig(config);
		return encryptor;
	}
}
  • 환경변수로 등록한 비밀번호를 @Value를 이용해 값을 가져온다.
    이때 @Value에 값을 환경변수 변수 이름과 매핑해준다.

  • JasyptConfig 클래스를 빈으로 등록해준다.

2-4. 암호화

  • 테스트 코드로 작성해 암호화 된 값을 얻어도 되고, 웹 사이트를 이용해도 된다.

  • 왼쪽은 암호화, 오른쪽은 복호화

    1. 첫 번째 칸에 암호화 하고자 하는 값을 입력하고

    2. 두 번째 칸에서 Two Way ... 를 선택해줘야 한다.
      양방향 암호화를 선택해야 복호화가 가능하기 때문이다.

    3. 세 번째 칸에서는 키 값을 입력한다.

    4. Encrypt 버튼을 클릭하면 맨 아래칸에 암호화 된 값이 출력된다.

2-5. 암호화 적용

  • application-local.yaml
cloud:
  aws:
    s3:
      bucket: opggbucket
    region:
      static: ap-northeast-2
    stack:
      auto: false
    credentials:
      instance-profile: true
      access-key: ENC(7sbfvXDIkJEOSR+bAeB0Q6lyhcAEd/4yOJfPpFd6oKA=)
      secret-key: ENC(R7k0I+j59XctP24RUkLH/U13G3f19hTUnXyj1SOrvKTm58scftS0sW+VY51H1LGqWNUqgRDH1G8=)

jasypt:
  encryptor:
    bean: jasyptStringEncryptor // 빈으로 등록한 빈 이름과 매핑
  • 암호화된 값을 ENC(암호화 된 값) 괄호안에 감싸주면 된다.

3. 배포시 환경변수 적용

  • 리눅스 서버에 환경변수를 추가해서 적용하거나, Docker를 이용한다면 Docker Container에 환경변수를 적용할 수 있다.

    • docker run할 때 환경변수 적용
      docker run -d -p 8080:8080 -e [환경 변수]=[] [docker image]:[tag] 
      • -e 또는 —env 옵션 사용
  • 공식 문서 참고

    docker run

0개의 댓글