차근차근/Spring

jasypt2

예쁜꽃이피었으면 2022. 7. 25. 16:34

[문서 & 참조]

http://www.jasypt.org/maven.html 

http://www.jasypt.org/spring31.html

 

https://limitx.tistory.com/6

https://java.elex.pe.kr/2017/11/jce-180151.html

https://m.blog.naver.com/0131v/220153940267

https://zamezzz.tistory.com/135

https://devchul.tistory.com/32

https://java.elex.pe.kr/2017/11/jce-180151.html


[적용 순서 & 현재까지 진행사항]

1. pom.xmlJasypt 디펜던시 추가

2. root-context.xml에 프로퍼티 설정

3. root-context.xmlJasypt사용을 위한 설정 추가

4. 프로퍼티에 암호화 값을 ENC()로 감싸서 입력

 


[추가한 jar 및 위치]

1. jasypt-spring31-1.9.2.jar

: 프로젝트 폴더 내 lib (프로젝트\src\main\webapp\WEB-INF\lib)

 

2. jasypt-1.9.2.jar

: 프로젝트 폴더 내 lib (프로젝트\src\main\webapp\WEB-INF\lib)

 

* 여러 버전 테스트하면서 .m2 폴더에 생겼던 다른 버전들은 삭제 해줌.

 

3. local_policy.jar - 1.8버전

: jre ( ~java-1.8.0-openjdk-1.8.0.191-1.b12\jre\lib

/ 톰캣(~ apache-tomcat-8.0.50\lib

/ 프로젝트 (프로젝트\src\main\webapp\WEB-INF\lib <- 기존에 있어서 덮어씀)

 

4. US_export_policy.jar - 1.8버전.

: jre ( ~java-1.8.0-openjdk-1.8.0.191-1.b12\jre\lib

/ 톰캣(~ apache-tomcat-8.0.50\lib

/ 프로젝트 (프로젝트\src\main\webapp\WEB-INF\lib <- 기존에 있어서 덮어씀)

 

https://java.elex.pe.kr/2017/11/jce-180151.html

java-home>/lib/security/java.security 파일을 열어 826번째 줄에서
crypto.policy=unlimited

crypto.policy=unlimited

의 주석 처리 부분을 제거한다.
또는, 자바 소스 코드에서
Security.setProperty("crypto.policy", "unlimited");

Security.setProperty("crypto.policy", "unlimited");

[작성한 내용]

1. pom.xml 추가내용

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

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

* 아마 위에 것만 살려도 될 것 같은데.. 아직 밑에 지우고 테스트는 안함..

 

2. root-context.xml

<bean id="environmentVariablesConfiguration"
     class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
   <property name="algorithm" value="PBEWithMD5AndDES" />
   <property name="passwordEnvName" value="JASYPT_PASSWORD" />
</bean>

// 환경 변수에 키 값 넣어서 사용 시 프로퍼티 이름은 passwordEnvName
// 바로 암복화 시 사용한 키값을 입력하려면 프로퍼티를 그냥 password라고 하면됨.
// 환경 변수 JASYPT_PASSWORD 에 암호화 시 사용한 키값 넣어둠.


<bean id="configurationEncryptor"
     class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
   <property name="config" ref="environmentVariablesConfiguration" />
 </bean>


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

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value=”${db.driverClassName}”/>
   <property name="url" value = "${db.url}"/>
   <property name="username" value="${db.username}"/>
   <property name="password" value="${db.password}"/>
 </bean>

+ 상단에 네임스페이스 추가함


<beans xmlns="http://www.springframework.org/schema/beans"
       ...
       xmlns:encryption="http://www.jasypt.org/schema/encryption"
       ...
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                           ...
                           http://www.jasypt.org/schema/encryption
                           http://www.jasypt.org/schema/encryption/jasypt-spring31-encryption-1.xsd
                           ...">

 

3. properties폴더 생성 후 db.properties파일 생성

위치나 파일명 등은 필요한대로 수정하면 된다.

datasource.driver=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://localhost/reportsdb
datasource.username=reportsUser
datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)

 

 


암호화 하기

프로퍼티 ENC안에 들어갈 암호화된 데이터 만들기

1. cmd창에서 해도됨.

2. 근데 내가 너무 안되서 혹시나 하고 그냥 플젝으로 만들었는데 그냥 사용중..

 

다이나믹웹 프로젝트 만들고

pom.xml에 디펜던시 추가 

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

 그냥 main있는 자바 파일에

public class App{
	public static void main(String[] args){
    
    String algo = "PBEWithMD5AndDES"; // 이건 기본이고 필요한 걸로 바꾸면 된다.
    Stirng password = "testPWD"; //암복호화 시 사용할 비밀번호 //환경변수에 담아서 사용
    
    StandardPBEStrigEncryptor encryptor = new StandardPBEStrignEncryptor();
    
    //암복호화 시 사용할 조건들 추가
    encryptor.setAlogorithm(algo);
    encryptor.setPassword(password);
    
    String url = encryptor.encrypt("암호화 할 URL입력");
    String name = encryptor.encrypt("암호화 할 DB name 입력");
    String pwd = encryptor.encrypt("암호화 할 DB pwd 입력");
    
    syso(pwd);
    //하면 암호화된 데이터 나옴.
  	//여기서 나온 암호화된 데이터를 프로퍼티에 ENC(pwd)로 감싸서 넣으면 됨.
    
    syso(encryptor.decrypt(pwd));
    //하면 복호화된 데이터 나옴.
      
    }
}

+ 내가 오래 걸렸던 부분이 암호화된 데이터를 고정값으로 받아야 한다길래

계속 

encryptor.setAlogorithm(algo);
encryptor.setPassword(password);

이 외에

encryptor.setKeyObtentionIterations(10000);

encryptor.setSaltGenerator(new StringFixedSaltGenerator("someFixedSalt"));

이건 추가해서 고정된 암호화 데이터를 받아서 

프로퍼티에 넣고.. 

설정파일을 어떻게 적어야 하는지 몰라서 계속 에러가 났었다... 

 

지금은 그냥 빼고 진행했고.. 아마 필요하면 더 찾아봐야할듯..

 

jce_policy-8.zip
0.01MB
UnlimitedJCEPolicyJDK7 (1).zip
0.01MB
jasypt-1.9.2.jar
0.12MB
jasypt-1.9.3.jar
0.14MB
jasypt-spring4-1.9.3.jar
0.05MB

반응형