티스토리 뷰

Spring Boot 로 웹 개발을 하다 보면  *.properties, *.yml 등과 같은 별도의 설정파일을 두게 됩니다. 주로 외부 서버 연결정보 , DB 연결정보 등과 같은 정적 정보가 들어가게 됩니다.

그중에는 DB 접속이 가능한 계정, 패스워드처럼 민감한 정보가 있을 수 있습니다.

그래서 몇몇 회사 같은 경우에는 아래와 같이 프로퍼티파일에 연결정보와 같은 주요정보가 발견되면 소스 보안 진단시 문제가 발생합니다.


example.properties

...

db.user = scott

db.password = titger

...


그럴경우 실제 패스워드나 아이디에 대해서 암호화를 처리를 해야 되는데 Spring Boot와 연동해서 쉽게 사용할 수 있는것이 Jasypt 라이브러리 입니다. (물론 Spring Boot 외 사용도 가능합니다. Maven dependency 정보가 다를수 있습니다.)
오픈소스구이구요
 사용법은 간단합니다. 요즘에 많이 사용하고 있는 Spring Boot 와 함께 사용한는 방법을 알아보겠습니다.



Jaspyt (Java Simplified Encryption)


1.Maven Dependency 추가 

pom.xml 에 파일에 아래를 추가해줍니다.(Spring Boot용)

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
...
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>1.16</version>
</dependency>
...
cs


2.대상문자 암호화 

암호화 방법은 여러방법을 제공 하지만 사용하기 간편하게 실행가능한 자바 클래스를 하나 만들어서 사용하겠습니다.

JasyptTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package info.m2sj
 
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
 
public class JasyptTest {
    public static void main(String[] args) {
        StandardPBEStringEncryptor jasypt = new StandardPBEStringEncryptor();
        jasypt.setPassword("m2sj");      //암호화 키(password)
        jasypt.setAlgorithm("PBEWithMD5AndDES");
 
 
        String encryptedText = jasypt.encrypt("tiger");    //암호화
        String plainText = jasypt.decrypt(encryptedText);  //복호화
 
        System.out.println("encryptedText:  " + encryptedText); //암호화된 값
        System.out.println("plainText:  " + plainText);         //복호화된 값
    }
}
cs


OUTPUT:

encryptedText:  GSgl23iN4fwfAtMkC3un0Q==

plainText:  tiger


3.복호화 설정

이제 암호화된 값으로 프로퍼티값을 변경하고 스프링에 복호화 대상임을 알려주면 됩니다.(스프링 boot 의 설정파일은 application.yml 또는 application.properties 입니다.)

application.properties

...

db.user = scott

db.password = ENC(GSgl23iN4fwfAtMkC3un0Q==)

...



4.Vm 옵션설정

마지막으로 was 실행시에 아래와 같은 파라미터를 추가해서 암복화시에 사용할 키정보를 설정해 주시면 됩니다.

-Djasypt.encryptor.password=m2sj


실제 운영서버에서는 위와같이 was 구동시에 파라미터로 전달하시면 되고요(보안 때문에) 로컬이나,개발환경에서는 개발편의에 따라 application.properties 파일에  암복화키를 직접 설정하셔도 됩니다.


application.properties

jasypt.encryptor.password=m2sj #패스워드 직접 설정


더욱 자세한 내용은 아래의 Jasypt 사이트를 방문 하시면 됩니다.

http://www.jasypt.org/


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크