egov 가이드 : http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:encryption_decryption
jasypt : http://www.jasypt.org/bouncy-castle.html
필수
PBEWITHSHA256AND128BITAES-CBC-BC 사용시(PBEWithMD5AndDES일경우 필요없음)
JCE 에러날경우..
(
http://gomp.tistory.com/218
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
)
필요없음..
jasypt-1.9.2.jar
context-datasource.xml
<bean id="bouncyCastleProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider"/>
<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="provider" ref="bouncyCastleProvider" />
<property name="algorithm" value="PBEWITHSHA256AND128BITAES-CBC-BC" />
<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="environmentVariablesConfiguration" />
<property name="password" value="com.korail" />
</bean>
<bean id="propertyConfigurer" class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="configurationEncryptor" />
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/globals.properties</value>
</list>
</property>
</bean>
---------------------------------------------------------------------
Integrating Jasypt with Spring 3.0
앞선 글에 이어서 JASYPT 라이브러리를 활용하는 소스를 간략이 살펴보도록 하겠다. 적용되는 관련 환경과 툴은 Spring 3.0x 에 Maven 이다.
1. Maven repository
아래 소스와 같이 spring 3.0x 에 맞는 라이브러리가 있다. 그리고 icu4j는 Java 5 SE 이하 버전일 경우에만 추가하고 Java 6 SE 버전 이상일 경우에는 내장된 Normalizer 패키지를 사용하므로 하단의 com.ibm.icu 라이브러리를 추가하지 않는다.
<!-- JASYPT: Spring 3.0x Simplified Encryption --> </dependency>
|
2. 원문 가이드
Maven Dependency Update를 마치고 자바 프로젝트에 라이브러리가 추가 되었다면 이제 Jasypt 를 사용할 준비가 되었다. 아래 Jasypt 사이트에서 상세한 가이드를 통해 쉽게 적용할 수 있다.
http://www.jasypt.org/spring3.html
3. DataSource Configuration (XML)
Jasypt + Spring 3.0 가이드를 살펴보면 아래와 같은 코드가 추가 되어 있는 것을 확인 할 수 있다.
일반적인 DataSource 설정이라면 propertyConfigurer와 dataSource 부분만 설정 되어 있다.
Jasypt를 적용하게 되면
- 빈객체가 두개 추가 되었고
- propertyConfigurer에서 사용되는 Class도 Jasypt에서 제공되는 Class를 활용하도록 한다.
<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<bean id="propertyConfigurer" class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
<!-- DataSource Configuration --> destroy-method="close"> <property name="url" value="${jdbc.url}"/>
. . .
</bean>
|
4. jdbc.properties 파일값 암호화
PBE방식으로 암호화해서 암호화 값을 properties에 대입하도록 한다.
http://www.jasypt.org/api/jasypt/1.8/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html
StandardPBEStringEncryptor Class를 활용한 값 암호화
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
String url = pbeEnc.encrypt("jdbc:oracle:thin:@x.x.x.x:1521:xxxxx");
System.out.println(url);
|
jdbc.properties 값대입 예시
jdbc.driverClassName=core.log.jdbc.driver.OracleDriver
|
이때 유의할 점은 ENC를 빼고 값을 대입하면 Jasypt에서 일반 문자열로 인식을 하게 되므로 암호화한 문자열 값 앞에 ENC로 감싸도록 한다.
------------------------------------------------------------------------------------------
JAVA Test Source
Security.addProvider(new BouncyCastleProvider());
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setProviderName("BC"); // jce provider name
pbeEnc.setAlgorithm("PBEWITHSHA256AND128BITAES-CBC-BC");
pbeEnc.setPassword("com.korail");
String url = pbeEnc.encrypt("jdbc:oracle:thin:@127.0.0.1:1521:XE");
String username = pbeEnc.encrypt("system");
System.out.println(url);
System.out.println(username);
System.out.println(pbeEnc.decrypt(url));
System.out.println(pbeEnc.decrypt(username));
System.out.println(pbeEnc.decrypt("2iOnc1A4VlTLHq01iaQLzxDGnCeF1gi/a0YcuZWZsr/97vmcEXH+Ziylq6GCZbiWSySzUdBJoKvBAu+7d5ND0g=="));
System.out.println(pbeEnc.decrypt("WmAFQNWpOYHpkZV7BrArP9YDrTO4vVxKBexlYgudCCB7gFQXW3n7VEKhhdexuHfN8xcW4uM2UekaIAdjy2vMeg=="));
'Back-End > Spring' 카테고리의 다른 글
spring message source 커스텀 (0) | 2020.03.25 |
---|---|
log4sql (0) | 2018.02.08 |
Spring Exception 분류 (0) | 2014.03.05 |
Spring에서 SQL Exception 처리하기. (0) | 2014.03.05 |
@RequestParam - 1:1로 파라미터 집어넣기 (0) | 2012.09.11 |