설 연수
하하호홓
설 연수
전체 방문자
오늘
어제
  • 분류 전체보기 (231)
    • Back-End (2)
      • Java (20)
      • JSP (13)
      • Spring (18)
      • Kotlin (0)
      • node.js (0)
    • Front-End (68)
      • JavaScript (19)
      • jQuery (39)
      • Angular (4)
      • HTML (5)
    • Dev-Ops (12)
      • Linux, Cloud (5)
      • docker, k8s (5)
      • ElasticSeach (2)
    • Other (33)
      • OOP (3)
      • 알고리즘 (2)
      • DB (12)
      • Git (1)
      • Swift (4)
    • Backup (65)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 패스트캠퍼스
    • Kafka
    • 404 error
    • docker
    • angular 콜백
    • mongodb
    • angular4
    • jquery invalid
    • flex
    • page not found
    • CORS
    • Redis
    • RESTful
    • angular callback
    • jOOQ
    • INVALID
    • Angular
    • MYSQL
    • angular2
    • 크로스도메인

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    설 연수

    하하호홓

    Back-End/Spring

    [Jasypt] jdbc.properties 접속정보 PBEWithMD5AndDES 암호화 2

    2015. 4. 21. 11:48

    egov 가이드 : http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:encryption_decryption

    jasypt : http://www.jasypt.org/bouncy-castle.html




    필수

    jasypt-1.7.jar

    jasypt-spring3-1.9.0.jar



    PBEWITHSHA256AND128BITAES-CBC-BC 사용시(PBEWithMD5AndDES일경우 필요없음)

    bcprov-ext-jdk15on-152.jar

    bcprov-jdk15on-152.jar



    JCE 에러날경우..

    (

    http://gomp.tistory.com/218

    http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

    )

    UnlimitedJCEPolicyJDK7.zip



    필요없음..

     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>
            <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로 감싸도록 한다.



    ------------------------------------------------------------------------------------------

    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
      'Back-End/Spring' 카테고리의 다른 글
      • spring message source 커스텀
      • log4sql
      • Spring Exception 분류
      • Spring에서 SQL Exception 처리하기.
      설 연수
      설 연수

      티스토리툴바