목차
0. 환경
- windows10
- openjdk version "1.8.0_242"
- STS4 TooL (이클립스)
- Spring Framework 4.3.8 released
- Spring MVC Project (Legacy Project)
1. maven 추가 (pom.xml)
- jasypt-spring31
<!-- https://mvnrepository.com/artifact/org.jasypt/jasypt-spring4 -->
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt-spring31</artifactId>
<version>1.9.2</version>
</dependency>
2. 암호화할 부분
[변경 전]
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://127.0.0.1:3306?useSSL=false&serverTimezone=UTC" />
<property name="username" value="user" />
<property name="password" value="password" />
[변경 후]
- username과 password가 직접 노출이 되지 않는 것을 확인할 수 있습니다.
- .properties 파일을 이용해 정보를 따로 관리합니다.
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://127.0.0.1:3306?useSSL=false&serverTimezone=UTC" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
#.properties file
#db(test Server)
jdbc.username=ENC(9k4SKcvQYus9RbBiN7PENQ==)
jdbc.password=ENC(O4QjSLwv5uTABGZSMOu+ohB6dMj0ad1Q)
3. 암호화 테스트
- jasypt가 잘 동작하는지 다음 소스로 확인해 봅니다.
- 다음 소스를 활용해 암호화를 할 것입니다.
[테스트 소스]
package com.kamp.util;
import java.io.IOException;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.registry.AlgorithmRegistry;
import org.jasypt.salt.StringFixedSaltGenerator;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.kamp.quartz.TestQuartzService;
public class JasyptTest {
private static final Logger logger = LoggerFactory.getLogger(JasyptTest.class);
public static void jastypt(String str) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setAlgorithm("PBEWITHMD5ANDTRIPLEDES");
encryptor.setPassword("test_password");
//ADD Salt
//saltGenerator를 지정하지 않으면 RandomSaltGenerator를 default로 사용합니다.
//random salt를 사용하는 경우는 암호화된 결과 값이 매번 바뀌므로 권장합니다
//encryptor.setSaltGenerator(new StringFixedSaltGenerator("someFixedSalt"));
String encryption = encryptor.encrypt(str);
String decryption = encryptor.decrypt(encryption);
System.out.println("암호화: " + encryption);
System.out.println("복호화: " + decryption);
}
public static void main(String[] args) throws IOException, InterruptedException {
jastypt("veneas");
//사용 가능한 알고리즘
logger.info("allDigestAlgorithms : {}", AlgorithmRegistry.getAllDigestAlgorithms());
logger.info("allPBEAlgorithms : {}", AlgorithmRegistry.getAllPBEAlgorithms());
}
}
[실행 결과]
암호화: yEbU168pBDcd18hL6yBVPg==
복호화: veneas
사용 가능한 알고리즘
allDigestAlgorithms : [MD2, MD5, SHA, SHA-224, SHA-256, SHA-384, SHA-512]
allPBEAlgorithms : [PBEWITHHMACSHA1ANDAES_128, PBEWITHHMACSHA1ANDAES_256, PBEWITHHMACSHA224ANDAES_128, PBEWITHHMACSHA224ANDAES_256, PBEWITHHMACSHA256ANDAES_128, PBEWITHHMACSHA256ANDAES_256, PBEWITHHMACSHA384ANDAES_128, PBEWITHHMACSHA384ANDAES_256, PBEWITHHMACSHA512ANDAES_128, PBEWITHHMACSHA512ANDAES_256, PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_128, PBEWITHSHA1ANDRC2_40, PBEWITHSHA1ANDRC4_128, PBEWITHSHA1ANDRC4_40]
4. root-context.xml (자바 bean 설정)
<!-- Jasypt Start -->
<bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentPBEConfig">
<!-- 사용할 암호화 알고리즘 -->
<property name="algorithm" value="PBEWithMD5AndDES" />
<!-- PBE (패스워드 기반 암호화) 암호 설정-->
<property name="password" value="test_password" />
</bean>
<bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="encryptorConfig" />
</bean>
<bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="encryptor" />
<property name="locations">
<list>
<!-- application.properties 파일 경로 -->
<value>classpath:/application.properties</value>
</list>
</property>
</bean>
<!-- Jasypt End -->
5. application.properties (.properties 파일 생성)
- 위에서 설정한 경로에 맞게 application.properties 생성합니다. (src/main/resources/application.properties)
- root-context.xml 에 설정한 내용과 3번에서 사용한 소스를 활용하여 내용을 입력해줍니다.
- 형식은 다음과 같고 ENC로 감싸주면 복호화를 해줍니다.
- 형식: ENC(암호화된 값)
#db(test Server)
jdbc.username=ENC(9k4SKcvQYus9RbBiN7PENQ==)
jdbc.password=ENC(O4QjSLwv5uTABGZSMOu+ohB6dMj0ad1Q)
6. DB 연결 정보 수정
- root-context.xml에 저장된 DB 정보인 username과 password를 다음과 같은 형태로 applcation.properties 파일 내용을 바라보도록 변경해주면 끝입니다.
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="jdbcUrl" value="jdbc:log4jdbc:mysql://127.0.0.1:3306?useSSL=false&serverTimezone=UTC" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
'Backend > Spring' 카테고리의 다른 글
[Spring Boot] MySQL + MyBatis + HikariCP 연동 (Mysql 연동) (0) | 2021.11.16 |
---|---|
[Spring Boot] 프로젝트 생성 (start.spring.io) (0) | 2021.11.15 |
[Spring] Spring MVC Project 스케쥴링 설정 (Spring Quartz) (0) | 2021.10.30 |
[Spring] Spring MVC Project Mysql 로그 출력 (log4jdbc) (0) | 2021.10.29 |
[Spring] Spring MVC Project logback 적용 (0) | 2021.10.28 |