일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- spring
- post
- Next.js
- mybatis
- NextJS
- centos7
- MariaDB
- console
- spring3
- security
- config
- git
- MSsql
- jquery
- mysql
- ajax
- javascript
- Java
- yona
- SpringBoot
- node.js
- Maven
- Eclipse
- rocky9
- popup
- nodejs
- submit
- docker
- PM2
- jenkins
- Today
- Total
ふたりで
jasypt 를 이용한 properties DB정보 암호화 본문
# 적용 환경
- springboot2.3
- mariadb
- mybatis2
- springsecurity
- maven
# 처음 jasypt dependency를 pom.xml에 추가만 했는대도 로그인 페이지에서 로그인 시도 시 HikariPool 데이터 소스
관련 에러가 발생하였다. 결론부터 말하자면 mybatis 버전 및 디펜던시 설정을 변경하니 잘 적용되었다.
정확한 원인은 아직도 잘은 모르겠으나 이틀 동안 삽질 끝에 해결을 하여 해당 내용을 아래 정리해본다.
#참고: 필자의 경우 tomcat8.5 버전에 springboot2.3 프로젝트를 war파일로 배포를 하며 view화면 쪽은 jsp를 사용한다.
# 먼저 pom.xml에 jasypt dependency를 추가해 준다.
<!-- jasypt -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
1. mybatis dependency를 아래와 같이 변경하였다.(주석 처리한 부분이 기존에 설정했던 부분이다.)
<!-- <dependency> -->
<!-- <groupId>org.mybatis</groupId> -->
<!-- <artifactId>mybatis</artifactId> -->
<!-- <version>3.3.0</version> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.mybatis</groupId> -->
<!-- <artifactId>mybatis-spring</artifactId> -->
<!-- <version>1.2.3</version> -->
<!-- </dependency> -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
2. mysql dependency를 아래와 같이 변경하였다.(주석 처리한 부분이 기존에 설정했던 부분이다.)
<!-- <dependency> -->
<!-- <groupId>org.mariadb.jdbc</groupId> -->
<!-- <artifactId>mariadb-java-client</artifactId> -->
<!-- <version>1.3.2</version> -->
<!-- </dependency> -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
3. 최종 DB 관련 dependency이다.
<!-- DB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!-- MyBatis log4jdbc -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- DB -->
4. application.properties 설정.
properties는 기존 DB 연결 설정을 암호화한 문자열로 대체하고 jasypt설정 값을 추가하였다.
##jasypt
jasypt.encryptor.bean=jasyptStringEncryptor
jasypt.encryptor.property.prefix=ENC(
jasypt.encryptor.property.suffix=)
##mariaDB1
spring.db1.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.db1.datasource.jdbc-url=ENC(agiKQ1hOFCyEM38QJU7JRnNlf3q4JNBMHvLRE+JDn1mMEEmAO/s92N+sIe7GgD/GZduXCI/lINLizqwertEIo1b1VHYu/OlEbX21A==)
spring.db1.datasource.username=ENC(RuPmP4U3ucZqZsPje5tGKCwdrtgh)
spring.db1.datasource.password=ENC(G3Vjutez31IWz0vm3bvasMSEHAgwu)
#spring.db1.datasource.jdbc-url=jdbc:log4jdbc:mysql://localhost:3306/mydatabase?serverTimezone=UTC
#spring.db1.datasource.username=abcd
#spring.db1.datasource.password=abcd1234
# 암호화 문자열을 생성하려면 아래 소스를 참고하여 만든다.
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
public class EncryptTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
StandardPBEStringEncryptor pbeEnc = new StandardPBEStringEncryptor();
pbeEnc.setAlgorithm("PBEWithMD5AndDES");
pbeEnc.setPassword("kkkdddbbb");
String url = jdbc:log4jdbc:mysql://localhost:3306/mydatabase?serverTimezone=UTC";
String username = "abcd";
String password = "abcd1234";
System.out.println("기존 URL :: " + url + " | 변경 URL :: " + pbeEnc.encrypt(url));
System.out.println("기존 username :: " + username + " | 변경 username :: " + pbeEnc.encrypt(username));
System.out.println("기존 password :: " + password + " | 변경 password :: " + pbeEnc.encrypt(password));
}
}
5. jasypt Config 설정.(아래 소스를 참고하여 jasyptConfig라는 class를 생성해준다.
- jasyptConfig.java
package com.test.jasypttest.config;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@Configuration
public class jasyptConfig {
private static final String ENCRYPT_KEY = "kkkdddbbb";
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor(Environment env) {
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
/*외부에서 ENCRYPT_KEY 를 대체할 경우 아래 주석 부분을 사용한다.
* 참고로 외부 에서 대체 하는 방식으로 적용 하려면 Application.java 클래스 파일에
* @SpringBootApplication 어노테이션이 있는부분에 @EnableEncryptableProperties
* 어노테이션을 추가로 삽입 하면 된다.
* 그리고 해당 키값을 tomcat의 arguments 에 설정해야 한다.(war배포일 경우...)
* arguments ex) -Djasypt.encryptor.password = XXXXXXXXXXXXXXXXXXXX
*/
//config.setPassword(env.getProperty("jasypt.encryptor.password"));
config.setPassword(ENCRYPT_KEY);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config);
return encryptor;
}
}
6. 외장 톰켓 또는 내장 톰켓의 VM Arguments 로 ENCRYPT_KEY 를 사용 할 경우.
6-1. springboot 내장 Embedded tomcat을 사용 할 경우 아래 그림 참조
6-2. 이클립스 외장 tomcat을 사용하는 경우도 비슷 하다 서버로 등록한 tomcat에 설정 파일을 열어 VM arguments
항목에 "-Djasypt.encryptor.password=XXXXXXXXXXXXXXXXXXXXXXX" 에 키값을 입력 하면 끝.
6-3. linux(centos) 에 구동 중인 tomcat의 경우.
- apt-get또는 yum을 통해 Tomcat을 설치한 경우에는 /etc/tomcat8/tomcat8.conf 파일이 있어야 하며,
해당 파일에 해당파일의 끝에 아래 와 같이 추가 한다.
JAVA_OPTS="$JAVA_OPTS -Djasypt.encryptor.password=XXXXXXXXXXXXXXXXXXXXXXXXXX"
- 다운로드및 압축 해제를 통해 설치된 Tomcat의 경우 아래와 같이 등록.
/]# <tomcat>/bin/catalina.sh 파일을 vi로 열어 마지막줄 또는 JAVA_OPTS 라고 등록된 부분을 찾아
그 다음줄(개행후)에 아래와 같이 등록 하고 저장 합니다.
JAVA_OPTS="$JAVA_OPTS -Djasypt.encryptor.password=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
'Spring' 카테고리의 다른 글
springboot2.3.X SchedulerConfig (0) | 2020.12.21 |
---|---|
SpringBoot+Security ajax Unauthorized request filter (0) | 2020.12.18 |
springboot2+mybatis+maven 다중(멀티) datasource 설정. (0) | 2020.12.11 |
springboot @Scheduled 사용 해 보기 (0) | 2020.12.01 |
response Body에 담긴 Json 문자 파싱 (0) | 2020.12.01 |