[문서 & 참조]
http://www.jasypt.org/maven.html
http://www.jasypt.org/spring31.html
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.xml에 Jasypt 디펜던시 추가
2. root-context.xml에 프로퍼티 설정
3. root-context.xml에 Jasypt사용을 위한 설정 추가
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"));
이건 추가해서 고정된 암호화 데이터를 받아서
프로퍼티에 넣고..
설정파일을 어떻게 적어야 하는지 몰라서 계속 에러가 났었다...
지금은 그냥 빼고 진행했고.. 아마 필요하면 더 찾아봐야할듯..
'차근차근 > Spring' 카테고리의 다른 글
스프링, 오라클, 페이징, 페이지네이션,마이바티스 (0) | 2023.03.17 |
---|---|
자바 엑셀 생성-암호걸기-다운로드 (0) | 2022.08.12 |
db접속 정보 암호화 (2) | 프로퍼티 | Jasypt (0) | 2022.06.08 |
db접속 정보 암호화 (1) | tomcat | JNDI | DataSource (0) | 2022.06.08 |
스프링 빈(bean) 및 서블릿(servlet) 객체 직접 얻기 출처: https://offbyone.tistory.com/144 [쉬고 싶은 개발자] (0) | 2022.04.29 |