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>
        <groupId>org.jasypt</groupId>
        <artifactId>jasypt-spring3</artifactId>
        <version>1.9.0</version>

    </dependency>

    <!-- JASYPT: com.ibm.icu.text.Normalizer -->
    <dependency>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
        <version>49.1</version>
    </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">
        <property name="algorithm" value="PBEWithMD5AndDES" />
        <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="jasyptPass" />
    </bean>

 

    <bean id="propertyConfigurer"

class="org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer">
        <constructor-arg ref="configurationEncryptor" />
        <property name="locations">
            <list>
                <value>classpath:properties/jdbc.properties</value>
            </list>
        </property>
    </bean>

 

    <!-- DataSource Configuration -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

      destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>

        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

 

        .

        .

        .

 

    </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();
    pbeEnc.setPassword("jasyptPass"); // PBE 값(XML PASSWORD설정)

 

    String url = pbeEnc.encrypt("jdbc:oracle:thin:@x.x.x.x:1521:xxxxx");
    String username = pbeEnc.encrypt("xxxxx");
    String password = pbeEnc.encrypt("xxxxx");

 

    System.out.println(url);
    System.out.println(username);
    System.out.println(password);

 

 

jdbc.properties 값대입 예시

 

    jdbc.driverClassName=core.log.jdbc.driver.OracleDriver
    jdbc.url=ENC(bga9c867hgFkE4ALozTBqBWj2C5wPxH8kDa//7Pqlm8DpGbFK6Fod)
    jdbc.username=ENC(6gaEuIet0A4zRztWpUkS5w==)
    jdbc.password=ENC(XR7FHiFzSBhGT+uIYZJO6w==) 

 

 

이때 유의할 점은 ENC를 빼고 값을 대입하면 Jasypt에서 일반 문자열로 인식을 하게 되므로 암호화한 문자열 값 앞에 ENC로 감싸도록 한다.

 

 

감사합니다 :)

Posted by 리트모스
:

Integrating jasypt with Spring's application configuration infrastructure

 

프로퍼티 파일IP주소, 아이디, 패스워드 등의 정보를 암호화하여 기입하고 JASYPT 라이브러리를 통해 암호화 값을 비교한다.

 

 

1. 적용환경

 - JDK 1.5.0_22

 - org.springframework 3.0.6.RELEASE

 - MAVEN

 

 

2. 라이브러리

 - Spring 3.0x Simplified Encryption JASYPT 1.9.0

 - icu4j 49.1 (com.ibm.icu.text.Normalizer)

 

 

JASYPT 설정을 마치고 Apache Tomcat을 통해 Spring Context를 로드하는 중에 java.text.Normalizer 패키지를 찾는 경우가 발생했다. 해당 패키지는 Normalizer (Java Platform SE 6) 이상에 포함되어 있는 패키지이다.

 

해당 패키지 말고 icu4j 라이브러리를 추가하면 된다라고 친절하게도 Exception을 떨궈준다. 1.5.x 이하의 버전 이라면 icu4j 라이브러리를 추가한다.

 

 

3. 파일첨부

jasypt-1.9.0.jar jasypt-spring3-1.9.0.jar icu4j-49.1.jar

 


4. 관련 URL

 - JASYPT : http://www.jasypt.org/

 - Spring 3.0x Simplified Encryption JASYPT : http://www.jasypt.org/spring3.html

 - Jasypt Maven Repository : http://mvnrepository.com/artifact/org.jasypt/jasypt

 - icu4j Maven Repository : http://mvnrepository.com/artifact/com.ibm.icu/icu4j

 

 

5. 라이센스

 - http://www.jasypt.org/license.html

 - The Apache Software License, Version 2.0

 - http://www.apache.org/licenses/LICENSE-2.0

 

 

Jasypt 사이트에서 가이드하고 있는 내용에는 PBEWithMD5AndDES 로 적용하도록 안내하고 있다. PBE방식과 함께 적용되는 MD5 방식이었지만, MD5가 해독이 가능하다는 얘기를 들은바 있다.

 

그래서 PBEWithSHAAnd128BitRC4 등의 PBEWithSHA* 알고리즘으로 암호화 하려고 시도 했지만 불가능했다. 이에 관련하여 상세한 정보가 있다면 댓글 바란다.

 

그리고 SHA512와는 틀리게 암호화 시 항상 다른 값을 만들어줬다. 그리고 이 항상 달리 만들어 주는 값으로도 JASYPT 라이브러리를 통해 값을 대조해볼때 알아서 인식을 했다. 깊이 들어가지는 않았지만 암호화 할때와 암호화값을 대조할때에도 특정한 조건이 형성이 되어 있을거라 예상된다.

 

 

감사합니다 :)

 

Posted by 리트모스
: