yml나 properties에
데이터베이스 접속정보, JWT 토큰 비밀번호를 기입 해놓을 것 이다
로컬에서는 상관없겠지만
github에 올려서 사용 시에 유출되면
악의적으로 사용이 가능해진다.
저런 취약한 정보들만 찾아다니는 봇도 있다.
이것을 jasypt라는 것으로 암호화하여 방지해보도록하자
전체흐름은 아래와 같다
key라는 녀석을 이용해서 암호화를 진행한다.
-> 인텔리제이 VM options에 key를 추가하고 사용하면 된다.
-> 부연설명을 하자면
1. key값에 자신이 정한 key값을 넣고, 오라클 비밀번호를 str에 넣는다
2. 암호화된 문자열을 긁어서 넣어준다 -> yml파일 -> password: ENC(암호화된비밀번호)
3. ENC() 로 감싸면 jasypt가 자동으로 매핑하여 복호화한다.
이해가 안될 수도 있으니 아래예제를 보자
0. 사전준비 - 로컬에 DB와 SPRINGBOOT 커넥션이 연결되어있어야함
연동관련은 다른글을 참조바람 (글을 써볼 생각중)
1. 의존성을 추가해주자
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.2.1'
2. 테스트코드 작성
// backend\src\test\java\com\greenjui\mrowebview\global\config\JasyptConfigTest.java
class JasyptConfigTest {
@Test
@DisplayName("패스워드를 jasypt로 암호화")
public void jasyptEncryptorPassword() {
String key = "sumin"; // 키를 이용하여 암호화 예정
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setPoolSize(8); // 코어 수
encryptor.setPassword(key);
encryptor.setAlgorithm("PBEWithMD5AndTripleDES"); // 암호화 알고리즘
String str = "1234";
String encryptStr = encryptor.encrypt(str);
String decryptStr = encryptor.decrypt(encryptStr);
System.out.println("암호화 된 문자열 : " + encryptStr);
System.out.println("복호화 된 문자열 : " + decryptStr);
}
}
암호화 복호화가 잘 되는 것을 볼 수 있다
3. VM options에 key추가
마지막으로 VM options에 아래의 코드를 추가해준다
#-Djasypt.encryptor.password=키값
-Djasypt.encryptor.password=sumin
4. 자바 설정파일 작성
// backend\src\main\java\com\greenjui\mrowebview\global\config\JasyptConfig.java
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Value("${jasypt.encryptor.password}")
private String key;
@Bean
public PooledPBEStringEncryptor jasyptStringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setPoolSize(8);
encryptor.setPassword(key);
encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
return encryptor;
}
}
5. 셋팅 끝 -> 테스트 해보자
5-1. 테스트코드를 이용해서 암호화코드를 얻고, 코드를 yml파일 DB접속 패스워드부분에 넣는다.
5-2. 원래 연결이 잘 되던 DB를 Jasypt 암호화한 패스워드로 접속시켜본다 -> 스프링 재기동 해보면 되겠죠?
6. 테스트코드에 key값을 지우고, github에 업로드한다 -> 끝!
참고자료
https://github.com/ulisesbocchio/jasypt-spring-boot
'스프링&스프링부트' 카테고리의 다른 글
[Spring]Spring 개발자를 위한 Annotation 원리와 커스텀 Annotation 실습 (0) | 2025.01.18 |
---|---|
[spring] AOP(관점 지향 프로그래밍) 이해하기: 실용적인 예제로 배우는 AOP (1) | 2024.01.21 |
[Spring] 메세지 컨버터란 (Spring message converter) (5) | 2023.11.01 |
[Spring] validation @NotNull @NotEmpty @NotBlank (0) | 2023.10.24 |