개요
앞선 포스트에서 JPA를 연결하는 과정에서 application.properties를 다음과 같이 설정하였다.
## h2 데이터베이스 설정
## spring.h2.console.enabled=true
## Maria DB 데이터베이스 설정
spring.datasource.driverClassName=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/around_hub_shop
spring.datasource.username=root spring.datasource.password=비밀번호
## JPA 설정
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
위와 같이 데이터베이스의 중요 정보들이 저장되어 있는 프로퍼티를 github에 공개한다면 보안에 치명적이다.
따라서 이러한 내용들을 암호화하는 작업을 진행해야 한다.
이때, Jasypt 라이브러리를 사용하면 쉽게 암호화, 복호화를 진행할 수 있다.
공식 사이트: https://github.com/ulisesbocchio/jasypt-spring-boot
Jasypt
Jasypt는 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 자신의 프로젝트에 기본 암호화 기능을 추가할 수 있도록 하는 Java 라이브러리이다.
간편하게 단반향 및 양방향 암호화 기술을 제공한다.
스레드로부터 안전하기 때문에 스프링 같은 싱글톤 환경에서 동기화 걱정 없이 사용할 수 있다.
원본 문자 집합에 대한 제약 없이 사용 가능하다. (일본어, 한국어 등의 언어 지원)
사용방법
pom.xml
dependency 추가
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
build > plugin 추가
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.4</version>
</plugin>
JasyptConfig 클래스
config 패키지 내에 생성한다.
/**
* Github : https://github.com/ulisesbochio/jasypt-spring-boot
*/
@Configuration
public class JasyptConfig {
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// 실행 VM 옵션에 패스워드 넣어줘야함
// -Djasypt.encryptor.password="패스워드"
config.setPassword(System.getProperty("jasypt.encryptor.password"));
config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 암호화 알고리즘
config.setKeyObtentionIterations(1000); // 반복할 해싱 횟수
config.setPoolSize("1"); // 인스턴스 pool
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64"); // 인코딩 방식
encryptor.setConfig(config);
return encryptor;
}
}
여기서 다음 부분이 중요한데, 조금 뒤에 설명하겠다.
config.setPassword(System.getProperty("jasypt.encryptor.password"));
암호화, 복호화 테스트
mvn 설치
본인은 wsl 환경이므로 다음 명령어를 통해 설치하였다.
sudo apt install maven
mvn --version
암호화, 복호화
암호화
mvn jasypt:encrypt-value -Djasypt.encryptor.password="the password" -Djasypt.plugin.value="theValueYouWantToEncrypt"
복호화
mvn jasypt:decrypt-value -Djasypt.encryptor.password="the password" -Djasypt.plugin.value="DbG1GppXOsFa2G69PnmADvQFI3esceEhJYbaEIKCcEO5C85JEqGAhfcjFMGnoRFf"
본인이 원하는 패스워드를 이용하여 암호화 및 복호화를 진행한다.
패스워드를 잊으면 해독이 불가능하니 꼭 기억해두어야 한다.
암호화 예시
하단에 보면 ENC로 시작하는 문자열이 보일 텐데 이것을 application.properties에 추가해주면 된다.
실행 환경설정
실행 버튼 왼쪽의 Edit Configurations를 클릭하고, VM 옵션으로 본인이 설정해두었던 패스워드를 전달하여야만 한다.
Reference
어라운드허브 스튜디오
악분 일상 (https://www.youtube.com/watch?v=p9vXmlG8TCM&t=581s)
'Back > spring' 카테고리의 다른 글
스프링부트 서비스 구조 (0) | 2022.02.28 |
---|---|
Swagger 라이브러리 (0) | 2022.02.26 |
POST, GET, PUT, DELETE API (0) | 2022.02.21 |
스프링 웹 개발 기초 (0) | 2021.06.26 |