일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 오버라이딩
- 오버로딩
- 스프링시큐리티 로그아웃
- 연산자
- 상속
- SQL튜닝
- 산술 연산자
- 객체
- java
- 논리 연산자
- SQL 튜닝
- SpringSecurity 로그인
- 비교 연산자
- 친절한 SQL 튜닝
- 자바의정석
- 함수
- SQL
- 이클립스 설치
- 반복문
- StringBuffer
- 예약어
- 친절한 SQL
- join
- @PreAuthorize("isAuthenticated()")
- 배열
- SpringSecurity 로그아웃
- spring 게시판 삭제
- 인텔리제이 Web 애플리케이션
- 객체지향
- 식별자
- Today
- Total
gi_dor
스프링부트 설정파일(application.properties) 암호화 (Jasypt) 본문
application.yml 이나 application.properties 파일에 DB의 비밀번호 또는 키 값을 명시해두는 경우 데이터들이 외부로 노출되어 보안에 문제가 생길수 있다
실제로 지난 프로젝트 당시 DB에 저장된 데이터를 모두 빼앗기고 비트코인을 지불하라는 메세지도 받았다
덕분에 DB 통채로 날리고 처음부터 다시 데이터를 손수 넣은 기억이 있다.
이후에 컴퓨터 포맷을 하는 상황이 올수도 있고 해서 암호화 세팅을 해두려고 한다.
Jasypt
Jasypt(Java Simplified Encryption)는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로
자신의 프로젝트에서 설정 파일의 속성 값들을 암호화, 복호화할 수 있는 Java 라이브러리라고 한다
특징
1. 간편하게 단방향 , 양방향 암호화 기술제공
2. 문자 집합에 제약없이 사용 가능함
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로 변경 되었고 합니다
PBEWithMD5AndDES
1. Config 클래스 생성
@Configuration
@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;
}
}
2. JasyptConfigTest - 속성 값 암호화
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);
}
해당 사이트에서도 암호화 진행이 가능하다
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
spring.datasource.replica.username=admin
spring.datasource.replica.password=ENC(ipO5Xcn2c1tKCf2jvbNqhxGmKTzxdZBD)
ENC(암호화된 데이터)
3. 암호화 키 값 세팅
3 - 1 VM options에 key추가
-Djasypt.encryptor.password=sample
3 - 2 application.properties key 값 세팅
jasypt.encryptor.password=sample
다들 DB 해킹당하는 일 없기를
https://gi-dor.tistory.com/251
https://goddaehee.tistory.com/321
https://notavoid.tistory.com/14
https://www.youtube.com/watch?v=B36xjHpU894
'Back_End > SpringBoot' 카테고리의 다른 글
[Refactor] 카페인 캐싱으로 성능개선 , Ngrinder (0) | 2024.06.11 |
---|---|
스프링부트 + MyBatis +MYSQL 페이징 처리 (0) | 2024.05.09 |
비밀번호 찾기 + 임시비밀번호 이메일전송 (0) | 2024.04.30 |
마이페이지 ver.2- SpringSecurity, MySQL , MyBatis (1) | 2024.04.25 |
회원가입 - 아이디 중복체크 비동기 ajax (4) | 2024.04.25 |