반응형
Spring boot로 개발을 하다 보면 application.properties나 application.yml 등의 설정 파일을 사용합니다. 이 설정 파일에는 서버 연결 정보, DB 연결 정보 등과 같은 민감한 정보가 있을 수 있습니다.
그래서 실무를 하다보면 민감한 정보는 암호화하지 않게 되면 보안진단 시 문제가 발생합니다.
따라서 민감한 정보는 암호화를 해야 하는데, Spring boot와 연동해서 쉽게 사용할 수 있는 것이 Jasypt 라이브러리(오픈소스) 입니다.
사용방법은 다음과 같습니다.
(Spring boot 이외에도 사용 가능하지만, 여기서는 Spring boot에서 사용하는 방법을 기록합니다.)
1. Dependency 추가
1.1 Maven
pom.xml에 아래와 같이 추가합니다.
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
1.2 gradle
build.gradle에 아래 코드를 추가합니다.
compile "com.github.ulisesbocchio:jasypt-spring-boot-starter:1.16"
2. Config class 생성
package com.example.demo;
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;
@Configuration
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("test"); //암호화에 사용할 키 -> 중요
config.setAlgorithm("PBEWithMD5AndDES"); //사용할 알고리즘
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
3. 설정 파일에 추가
(여기서는 application.properties를 사용합니다.)
jasypt.encryptor.bean=jasyptStringEncryptor
4. 암호화된 값을 생성
이제 데이터를 암호화해야 합니다.
여기서는 간단히 main 메서드를 이용합니다.
public static void main(String[] args) {
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword("test"); //JasyptConfig에 설정된 암호화 키를 입력
String enc = pbeEnc.encrypt("1234"); //암호화 할 내용
System.out.println("enc = " + enc); //암호화 한 내용을 출력
//테스트용 복호화
String des = pbeEnc.decrypt(enc);
System.out.println("des = " + des);
}
위 코드를 실행하면 아래와 같이 Console에 표시됩니다.
> Task :JasyptConfig.main()
enc = rRrtMnD2/HZzSVqc96k3ng==
des = 1234
5. 설정 파일에 암호화된 값을 입력합니다.
Jasypt는 암호화된 값을 입력할 때 ENC으로 감싸줍니다.
spring.datasource.sql-script-encoding=UTF-8
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=ENC(rRrtMnD2/HZzSVqc96k3ng==)
spring.datasource.username=ENC(rRrtMnD2/HZzSVqc96k3ng==)
spring.datasource.password=ENC(rRrtMnD2/HZzSVqc96k3ng==)
728x90
반응형
'웹 개발' 카테고리의 다른 글
[JPA] Entity to DTO, ModelMapper (0) | 2021.07.18 |
---|---|
Get Spring Security Principal in JSP EL expression (0) | 2021.07.11 |
[Eclipse] Spring boot 프로젝트에서 war 파일 만들기 (0) | 2021.07.04 |
SpringBoot 에서 hibernate.dialect 에러 발생. (로컬서버 실행 안되는 현상) (0) | 2021.07.04 |
javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication (0) | 2021.06.04 |