Spring
[ Springboot ] 설정파일(properties, yml) 암호화
구티맨
2020. 5. 22. 15:09
설정파일에 비밀번호와 같은 민감정보를 저장하는 경우가 있는데, 보안을 위해 암호화 하는 방법을 알아보겠다.
암호화에는 jasypt( Java Simplified Encryption ) 자바 암호화 라이브러리를 사용하였다.
먼저, Springboot 용 라이브러리 및 BouncyCastle 라이브러리 를 추가한다.
compile (group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '2.1.1')
compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.61'
Configuration 클래스에 @EnableEncryptableProperties를 추가해주고, 암호화에 사용할 빈을 생성한다.
예제에서는 PBE( Password Based Encryption ) 를 사용하고, SHA256, AES128 사용을 위해 BouncyCastle 라이브러리를 사용한다.
BouncyCastle 은 PBE에 보다 많은 알고리즘을 제공해 준다.
@Configuration
@EnableEncryptableProperties
public class PropertyEncyptConfiguration {
@Bean("encryptorBean")
public PooledPBEStringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("xoxo");
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
return encryptor;
}
}
테스트 코드에, 암호화할 데이터를 암복호화 해본다.
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("xoxo");
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
String plainText = "test";
String encryptedText = encryptor.encrypt(plainText);
String decryptedText = encryptor.decrypt(encryptedText);
System.out.println("Enc:"+encryptedText+", Dec:"+decryptedText);
Enc:iLe7hTPNHCF+o2vbKDpict0DKEhtSTBHuJk4mw1Tiheg6WdSwyJ96B1hejJTf+sp, Dec:test
설정 파일에, 암호화를 하는 bean 이름을 지정해 주고, 암호화된 내용을 작성해 준다.
jasypt:
encryptor:
bean: encryptorBean
password: ENC(iLe7hTPNHCF+o2vbKDpict0DKEhtSTBHuJk4mw1Tiheg6WdSwyJ96B1hejJTf+sp)