본문 바로가기
Web Development/Spring Legacy

[Spring / Legacy] Jasypt Library를 이용한 DB 계정 정보 암호화

by 감자맹고우 2021. 12. 23.
728x90
반응형

프로젝트를 진행하다보면 낮은 버전의 JDK를 사용해야 할 때가 있다.

 

이 때, DB 계정 정보를 빠르게 암호화할 수 있는 방법이 있다.

 

바로 Jasypt 라이브러리를 이용하는 것이다.

 

버전 정보

낮은 버전의 JDK 1.8 버전 예 ) 1.8.0_151 등
(https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html)
jasypt-1.9.2 jasypt-1.9.2-dist.zip (SOURCE FORGE에서 다운로드)
IDE Eclipse

 

 

반응형

[ 프로젝트 적용 순서 ]

 

1. 시스템 환경 변수 설정이 되어 있어야 한다( 기존 환경 변수가 낮은 버전이 아니라면 일시적으로 환경 변수를 변경 => cmd로 암호화 값을 받은 후 다시 기존 버전으로 원상 복구하면 됨 )

 

 

2. jasypt-1.9.2-dist.zip을 압축해제한다

 

 

3. 명령 프롬프트(cmd) 창을 열고, 압축 해제한 jasypt 폴더의 bin폴더로 경로를 설정한다.

예 ) cd C:\Downloads\jasypt-1.9.2-dist\jasypt-1.9.2\bin

아래와 같이 암호화 작업을 한다 (복호화는 확인 용도)

 

 

 

① 암호화 *

encrypt input=“암호화할 값” password=“키 값” algorithm=“적용할 암호화 알고리즘” 입력
(예 : encrypt input=“test“ password=“test“ algorithm=“PBEWITHMD5ANDDES“)

 

ENVIRONMENT 적용된 JAVA 버전
ARGUMENTS 입력 값
OUTPUT 암호화 값

 

==> ARGUMENTS(INPUT) 값과 OUTPUT 값을 기억 !!! **

 

 


② 복호화(확인용)

decrypt input=“복호화할 값” password=“키 값” algorithm=“적용할 암호화 알고리즘” 입력
(예 : decrypt input=“MkeTNSesdm35edc2“ password=“test“ algorithm=“PBEWITHMD5ANDDES“)

 

반응형

 

4. 프로젝트 적용

 

ⓐ pom.xml에 dependency 추가

<dependency>
	<groupId>org.jasypt</groupId>
	<artifactId>jasypt-spring31</artifactId>
	<version>1.9.2</version>
</dependency>

 

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" > 내용 변경

(Property가 따로 있다면 Property에서 ENC(암호화 값) 으로 변경 하면 된다)

<property name="url"			value="ENC(암호화한 값)" />	//암호화한 OUTPUT 값
<property name="username"		value="ENC(암호화한 값)" />
<property name="password"		value="ENC(암호화한 값)" />	//Url 전체 암호화 가능

 

 

ⓒ dataSource bean이 위치한 xml파일(예 : context-datasource.xml)에 Jasypt 설정을 추가 ***

<!-- Jasypt -->
<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
	<property name="algorithm" value="PBEWITHMD5ANDDES" />
	<property name="passwordEnvName" value="test"/>
</bean>
	
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
	<property name="config" ref="environmentVariablesConfiguration" />
</bean>
	
<bean id="propertyConfig" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
	<constructor-arg ref="configurationEncryptor"/>
	<property name="location" value="classpath:/ENC 적용 경로"/>
</bean>


<!-- algorithm : 적용할 암호화 알고리즘 -->
<!-- passwordEnvName : 암호키 값 (암호키 값도 숨길 수 있음) -->
<!-- location : 
classpath:/이후의 값은 ENC가 사용된 경로(property가 있다면 property 경로)
보통, property나 xml파일이 위치하는 src/main/resources 이후의 하위 경로만 적어주면 됨
-->

 

 

정상 동작 확인 !!!

 

반응형

 

==========================================================================

 

 

* : cmd창에서 bin 폴더로 경로 변경 후, listAlgorithms 명령어 실행 시 적용 가능한 알고리즘 종류 확인이 가능하다.

암/복호화 시 OUTPUT에 'java.lang.ExcpetionInitializerError' 에러 출력 시 JDK 버전이 맞지 않아 발생하는 문제이다.

 

 

** : 콘솔창 붙여넣기 단축키는 ' SHIFT + INSERT '

 

 

*** : 암호키 값을 숨기는 방법

 

ⓐ 위의 프로퍼티에서 직접 암호키(test)를 적었던 내용을 다음과 같이 변경

<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD"/>

 

ⓑ Package Explorer 창에서 우클릭 -> Run As -> Run Configurations -> 현재 사용 중인 Tomcat 선택 -> Environment -> New... ->

Name : APP_ENCRYPTION_PASSWORD
Value : 암호키 값(예 : test)

적용 후 동작 확인

 

 

추가) Linux 서버 적용 방법

ⓐ 톰캣 경로의 bin 폴더에서 setenv.sh 파일을 생성한다
ⓑ export APP_ENCRYPTION_PASSWORD=암호키 값 을 적어주면 된다

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글