프로젝트를 진행하다보면 낮은 버전의 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=암호키 값 을 적어주면 된다
🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱🏍
댓글