application.yml
이나 application.properties
파일에 DB의 비밀번호 또는 키 값을
입력 한채로 깃허브에 PUSH 하는 경우 데이터들이 외부로 노출되서 보안에 문제가 생길수 있다
실제로 지난 프로젝트 당시 DB에 저장된 데이터를 모두 빼앗기고 비트코인을 지불하라는 메세지도 받았다
덕분에 DB 통채로 날리고 처음부터 다시 데이터를 손수 넣은 기억이 있다....
대충 이런거 받음 ^^;
그외에 컴퓨터 포맷을 하는 상황이 올수도 있고 해서 무튼 기타등등 이유로 인해
암호화 세팅을 해두려고 한다.
Jasypt
(Java Simplified Encryption)는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도
최소한의 노력으로 자신의 프로젝트에서 설정 파일의 속성 값들을 암호화, 복호화할 수 있는
Java 라이브러리
라고 한다
(진짜 지식없어도 됨;)
PBEWithMD5AndDES 암호화 방식을 사용하는 경우 브라우저에서 간단하게 암호화,복호화 할 수 있다.
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
암호화 알고리즘 (Algorithm) : 3.0 버전 부터 기본 알고리즘이 PBEWithMD5AndDES 에서 PBEWITHHMACSHA512ANDAES_256로 변경 되었고 한다
@EnableEncryptableProperties
public class JasyptConfig {
@Value("${jasypt.encryptor.password}")
private String key; // 암호화 시 사용될 키 값
@Bean("jasyptEncryptorDES")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(key); // 암호화키
config.setAlgorithm("PBEWithMD5AndDES"); // 알고리즘
config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
config.setPoolSize("1"); // 인스턴스 pool
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
config.setStringOutputType("base64"); //인코딩 방식
encryptor.setConfig(config);
return encryptor;
}
}
public class JasyptConfigTest {
@Test
void stringEncryptor() {
String url = "db_url";
String username = "admin";
String password = "12341234";
System.out.println(jasyptEncoding(url));
System.out.println("::::: username : "+jasyptEncoding(username));
System.out.println("::::: password : "+jasyptEncoding(password));
}
public String jasyptEncoding(String value) {
String key = "han";
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword(key);
return pbeEnc.encrypt(value);
}
Test 문으로 암호화된 값을 뽑아내지 않아도 정말정말 쉽게
해당 사이트에서도 암호화 진행이 가능하다
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
spring.datasource.replica.username=admin
spring.datasource.replica.password=ENC(ipO5Xcn2c1tKCf2jvbNqhxGmKTzxdZBD)
ENC(암호화된 데이터)
-Djasypt.encryptor.password=sample
jasypt.encryptor.password=sample
다들 DB 해킹당하는 일 없기를
참고 사이트
에러
[error] application.properties 암호화 Jasypt 발생한 문제
[스프링부트] Spring Boot 설정파일(yaml, properties) 암호화 (with Jasypt)