Jasypt로 설정 암호화 하기

박진형·2022년 7월 7일
1

instakyuram

목록 보기
1/5

Jasypt는 public한 곳에 애플리케이션을 배포할 때 DB 계정이나 중요 비밀 키 값들이 평문으로 그대로 저장되어 올라가는 것을 막기 위해 프로퍼티를 간단하게 암호화할 수 있는 라이브러리입니다.

준비

  • 의존성 추가
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
  • Bean 설정 encryptor.key를 환경 변수로 등록해 암/복호화 할 때 사용하는 키 값으로 사용합니다.
@Configuration
@Profile({"dev","real"})
public class JasyptConfig {

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

	@Bean("jasyptStringEncryptor")
	public StringEncryptor stringEncryptor() {
		PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
		SimpleStringPBEConfig config = new SimpleStringPBEConfig();
		config.setPassword(password);
		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;
	}
}

저는 instakyuram으로 패스워드를 설정했습니다.

평문 → 암호문

  • instakyuram의 설정 일부분을 암호화 해서 정상적으로 실행이 되는지 확인해보겠습니다.
datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: password
    url: jdbc:mysql://localhost:3306/kyuram
root 
-> oYO/9DBKBBCkp9If+M0cgA==

password
-> qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz

jdbc:mysql://localhost:3306/kyuram 
-> 2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP

암호화된 데이터는 ENC(암호화 데이터) 와 같이 암호화 되었다는 표시를 해줘야합니다.

spring:
  config:
    activate:
      on-profile: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: ENC(oYO/9DBKBBCkp9If+M0cgA==)
    password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz)
    url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP)

실행

JPA를 의존성에 추가하고 application.yml에 JPA 설정을 추가하고 애플리케이션을 실행해봅니다.

JPA를 의존성에 추가하면 DB Connection이 제대로 이루어지지 않는다면 애플리케이션은 실행되지 않을 것 입니다.

  • 정상적으로 암호문을 입력했을 때 → 정상적으로 실행 되었습니다.
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: ENC(oYO/9DBKBBCkp9If+M0cgA==)
    password: ENC(qK5ua96GDU0kmcOu4N8+yRmFESxjLpqz)
    url: ENC(2JvUMlda7+XaxKznD63C+6p1KpOgGpWS5MmCkCfP0yWLByds0eM6nrP/svKlbEsP)
  jpa:
    show-sql:true
hibernate:
      ddl-auto: none
    generate-ddl:false
defer-datasource-initialization:true

  • 임의로 암호문을 망가뜨렸을 때 → 실행되지 않습니다.


0개의 댓글