반응형
개발 환경 정보와 같은 노출되면 안되는 민감한 정보를
암호화하고 OS 환경변수로 등록하는 방법을 포스팅합니다.
관련 정보는 아래 사이트에서 확인할 수 있습니다.
github.com/ulisesbocchio/jasypt-spring-boot
1. 의존성 추가
버전을 명시하지 않으면 의존 주입이 안되어서
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'
2. JasyptConifg.java
spring 구동 시 암복호화 설정 주입을 합니다.
package com.otrodevym.dm.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;
@Configuration
public class JasyptConifg {
@Value("${jasypt.encryptor.password}")
private String encryptKey;
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
System.out.println("encryptKey : " + encryptKey);
config.setPassword(encryptKey);
// config.setPassword(System.getenv("JASYPT_PASSWORD")); // 환경 변수
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
3. application.yml
application.yml에서 @Bean("jasyptStringEncryptor") 빈 이름을 명시합니다.
jasypt:
encryptor:
bean: jasyptStringEncryptor
# password: dm_password!@#$%^123456
# property:
# prefix: ENC[
# suffix: ]
4. JasyptTest.java
암복호화가 잘 되는지 테스트합니다.
String plaintText = "평문 비밀번호"; 에는 사용하는 비밀번호를 넣습니다.
config.setPassword("암복호화 키"); 암복호화에 사용할 키를 넣습니다.
위 두가지 값은 노출되면 안됩니다.
package com.otrodevym.dm.config;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
public class JasyptTest {
@Test
public void jasyt_test() {
String plaintText = "평문 비밀번호";
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("암복호화 키");
// config.setPassword(System.getenv("JASYPT_PASSWORD"));
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
String encryptText = encryptor.encrypt(plaintText);
System.out.println(encryptText);
String decryptText = encryptor.decrypt(encryptText);
System.out.println(decryptText);
assertThat(plaintText).isEqualTo(decryptText);
}
}
5. 사용 방법 및 환경변수로 설정
위 소스를 돌려보면 암호화 된 값이 나오고
해당 값을 'ENC(암호화 값)' 으로 감싸서 application.yml에 작성합니다.
5-1. 암호화 키 적용 하는 방법(+VM option)
위 사진처럼 @Value("${jasypt.encryptor.password}") 값을 설정해야 하는데
application.yml에 저장하면 의미가 없어지므로 VM option에서 설정합니다.
-Djasypt.encryptor.password=암호화할 키
5-2. 암호화 키 적용 하는 방법(+OS 환경변수)
암호화 키를 환경변수에 등록합니다.
1. @Configuration public class JasyptConifg { 에서 환경변수 가져오는 방법
2. application.yml에서 환경변수 가져오는 방법
${변수명} 형태로 지정하면 환경변수 값을 가져올 수 있습니다.
소스는 주입으로 수정합니다.
반응형
'개발(합니다) > Java&Spring' 카테고리의 다른 글
[spring boot 설정하기-21] spring cloud gateway(2) 설정 및 테스트 소스 (0) | 2021.05.24 |
---|---|
[spring boot 설정하기-20] spring cloud gateway(1) 설정 및 테스트 소스 (0) | 2021.05.23 |
[spring boot 설정하기-18] spring cloud eureka(2) 설정 및 테스트 소스 (0) | 2021.05.19 |
[spring boot 설정하기-17] spring cloud eureka(1) 설정 및 테스트 소스 (0) | 2021.05.18 |
[spring boot 설정하기-16] spring cloud config(3) git 연동 설정 및 테스트 소스 (0) | 2021.05.08 |