본문 바로가기

웹개발/Spring

[Spring] Jasypt 를 이용한 DB 설정파일 암호화


Spring DB 설정 파일 암호화

Jasypt를 이용하여 db 설정 파일 암호화를 진행하겠습니다.

보통 스프링에서 MySql, Oracle, MariaDB 등을 사용하기 위해서 xml 설정을
하는데 아래 사진처럼 설정을 합니다.

  context-datsource.xml



이런식으로 xml 파일을 설정해서 호스팅이나 실제 서버에 소스파일을 올려서 사용한다면 
악의적인 생각을 품고 있는 해커에게 해킹을 당할 수도 있습니다.

100%로 완벽한 방법은 아니지만 해커의 1차적인 공격의 위험을 줄이고자 Jasypt 를 사용하여 
xml 설정파일을 암호화 해보겠습니다.

먼저 Jasypt를 사용하기 위해서는  pom.xml  파일에 아래의 사진처럼 dependency 를 추가해 줍니다.

  pom.xml


추가를 하면 maven에 위와 같은 jar파일들이 추가된 것을 확인할 수 있습니다.



dependency에 추가를 하면 그 다음으로 암호화 하고 싶은 부분을 java단에서 아래의 사진처럼 암호화 해줍니다.

  Encryptor.java


먼저 암호화하기 위해서 암호화 알고리즘을 선택해야 하는데
저는 PBEWithMD5AndDES 암호화 알고리즘을 선택하였습니다.

PBEWithMD5AndDES  대해서는 아래의 버튼을 클릭하시거나 및 구글에서 찾아보시면 될 것 같습니다.


PBEWithMD5AndDES 는 암호화 및 복호화하는 가 필요한데
저는 'GOOD'를 사용하여 진행하도록 하겠습니다.

제가 암호화 할 부분은 url, username, password  입니다.

위의 사진처럼 코딩을 한 다음 실행을 하면 아래 사진과 같은 암호화된 결과 값을 보게 됩니다.

  Console


암호화 설정을 마친 부분을 복호화 해서 사용하기 위해서 
db를 설정한 xml 파일을 아래의 사진처럼 수정 해주시면 됩니다.

  context-datsource.xml


위의 사진을 보시면 복호화 알고리즘으로 'PBEWithMD5AndDES '를 사용하고, 
복호화 키로 'GOOD '를 사용하고 있다는 것을 알 수 있습니다.

또한 암호화 한 키카 properties에 저장되는 데 
'classpath:egovframework/message/common-db.properties'
설정하여 resources 폴더 경로 밑에 있는 common-db.properties  파일의 값들을 불러온다고 설정을 해줍니다.

그리고 그 다음으로 properties 값들을 암호화한 값을 가지고 아래 사진처럼 설정 해줍니다.

  common-db.properties


위의 사진처럼 암호화된 값을 복호화 하기 위해서 꼭 ENC로 감싸주셔야 합니다.

마지막으로 db 설정부분을 아래와 같이 설정해주시면 됩니다.

  context-datsource.xml


위와 같이 설정을 하고 tomcat 서버를 재시작 해주시면 됩니다.


만약 이게 제대로 실행되는 건지 궁금하시다면 properties 파일에 있는 값을 살짝 수정해주시고


서버를 재시작해보면 아래 사진과 같이 에러가 발생한다는 것을 확인 가능합니다.


추가로 한가지 더 알려 드릴려고 합니다.

Properties 파일 -> xml 파일 변경

properties 파일을 이용하지 않고, 암호화된 값들을 xml파일에 저장하고 그곳에서 불러오는 방법을 알려드리겠습니다.

저 같은 경우 common-db.xml 이라는 xml 파일을 만들고 아래 사진처럼 properties와 비슷하게  xml 파일을 작성합니다.


※ xml 문법은 위 링크에 간단히 명시 되어 있으나, 자세한 내용은 구글을 통해 찾아보면 될 것 같습니다.


또한 아래의 사진처럼 db관련한 xml 파일을 수정합니다.



위의 사진처럼 설정하시면 properties 설정 파일 말고  xml 파일을 사용하여 db 설정 파일을 암호화 할 수 있습니다.