일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JVM
- db
- IntelliJ
- ubuntu
- jenkins
- jsp
- Gradle
- Web Server
- Spring
- laravel
- linux
- Spring Batch
- it
- javascript
- redis
- Spring Boot
- MySQL
- Git
- Oracle
- AWS
- 요리
- php
- ReactJS
- java
- devops
- 맛집
- elasticsearch
- springboot
- Design Patterns
- tool
Archives
- Today
- Total
아무거나
[Spring boot] Jasypt를 활용한 Application Property 암호화 본문
반응형
Library Document
Jasypt를 활용한 Application Property 암호화
Application.yml 에다 보통 DB 접속정보등의 데이터가 기재되어있다. 이러한 내용을 외부에서 탈취해갈 위험성을 대비하여 jasypt를 활용하여 보안을 강화하자
- http://www.jasypt.org/download.html 에서 jasypt 다운 (1.9.2 버전 기준)
- 압축 풀고 cmd에서 bin 폴더로 이동 (./file/jasypt-1.9.3/bin)
- encrypt input="bkjeontest!@" password="bkjeon!@" algorithm="PBEWITHMD5ANDDES" (온라인 암/복호화 사이트 https://www.devglan.com/online-tools/jasypt-online-encryption-decryption)
- Output) ig/i7xWXbv9Ss+GIQFm7Vk2RwUlQRBTb -> application.yml 에 정의 되어 있음 ENC라고 괄호안에 암호화된 패스워드를 넣으면 된다. (ENC로 해야 암호화된 문자열을 인식한다)
ENC(ig/i7xWXbv9Ss+GIQFm7Vk2RwUlQRBTb)
- 또는 해당 API에서 encrypt된 값으로도 사용가능
- 1~3 encrypt 과정으로 해도되고 해당 sample code에서 제공하는 EncryptionController 에서 encrypt 값을 사용해도 된다.
- Output) ig/i7xWXbv9Ss+GIQFm7Vk2RwUlQRBTb -> application.yml 에 정의 되어 있음 ENC라고 괄호안에 암호화된 패스워드를 넣으면 된다. (ENC로 해야 암호화된 문자열을 인식한다)
- jasyptEncryptConfig 작성
import lombok.extern.slf4j.Slf4j; import org.jasypt.encryption.StringEncryptor; import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Slf4j @Configuration public class jasyptEncryptConfig { @Bean("jasyptStringEncryptor") public StringEncryptor jasyptStringEncryptor() { String passwordKey = System.getProperty("jasypt.encryptor.password"); if (passwordKey == null) { throw new RuntimeException(); } PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword(passwordKey); config.setAlgorithm("PBEWithMD5AndDES"); config.setKeyObtentionIterations("1000"); config.setPoolSize("1"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); encryptor.setConfig(config); return encryptor; } }
- gradle 의존성 추가
... // 만약 오류가 나면 spring 버전이나 jdk 버전 호환여부를 확인하자 // jasypt encrypt compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.3' ...
- application.yml 에 내용 추가 (jasypt bean 활성화)
... jasypt: encryptor: bean: jasyptStringEncryptor ...
- passwordKey 는 VM Option 에 넣어준다. ( -Djasypt.encryptor.passwordKey=bkjeon!@ )
- Sample Code
public void getJasyptEncryptProperties() { try { StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor(); pbeEnc.setPassword(System.getProperty("jasypt.encryptor.password")); pbeEnc.setAlgorithm("PBEWithMD5AndDES"); // 암호화, 복호화 String encrypt = pbeEnc.encrypt("wjsqhdrms"); String decrypt = pbeEnc.decrypt(encrypt); if (log.isInfoEnabled()) { log.info("encrypt: {}, decrypt: {}", encrypt, decrypt); } } catch (Exception e) { if (log.isErrorEnabled()) { log.error("getJasyptEncryptProperties ERROR {}", e.getMessage()); } } }
반응형
'Java & Kotlin > Spring' 카테고리의 다른 글
[Spring Boot] DB 관련 로그 추가(쿼리바인딩) (1) | 2021.05.14 |
---|---|
[SpringBoot] Ehcache를 사용한 Cache 사용 (0) | 2021.04.22 |
[Lombok] Lombok 사용시 주의사항 (0) | 2020.12.01 |
[Lombok] Lombok 사전 (0) | 2020.11.27 |
Field Injection이 아닌 Constructor Injection 사용하자 (0) | 2020.11.24 |
Comments