[Jasypt] properties 암호화

홍준·2021년 8월 1일
2
post-thumbnail

서론

Spring에서 properties 또는, yaml 파일에 데이터베이스 접속 정보나, 다양한 설정 정보들을 담아두고 활용하고 있다.
properties 또는, yaml 파일이 외부로 노출이 되면 충분히 악의적으로 사용이 가능할 수 있다는 생각이 들어 파일의 정보를 암호화를 해보려고 한다.


Jasypt 라이브러리란?

Spring 암호화라는 키워드로 검색 하였을 때 Jasypt 라는 라이브러리가 자주 등장했다.
Jasypt에 대해 찾아보니 Java , Java + Spring , Java + 하이버네이트 등 여러 프레임 워크에서 암복호화를 지원해주는 오픈소스 라고한다.

간단히 얘기하자면 개발자가 암호화 작동 방식에 대한 깊은 지식 없이도 최소한의 노력으로 프로젝트에 기본 암호화 기능을 추가 할 수있는 Java 라이브러리이다.


Jasypt을 사용해보자.

1. Maven Dependency 설정

먼저 암호화를 위해 jasypt 라이브러리를 추가해야한다.

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

2. Spring Context 설정

context에 복호화를 위한 객체 3개를 bean으로 만들어준다.

<beans:bean id="encryptorConfig" class="org.jasypt.encryption.pbe.config.EnvironmentPBEConfig">
  <beans:property name="algorithm" value="PBEWithMD5AndDES" />
  <beans:property name="passwordEnvName" value="TEST_KEY" />
</beans:bean>

<beans:bean id="encryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <beans:property name="config" ref="encryptorConfig" />
</beans:bean>

<beans:bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
  <beans:constructor-arg ref="encryptor" />
  <beans:property name="locations">
    <beans:list>
      <beans:value>classpath:config/db-context-loc.properties</beans:value>
    </beans:list>
  </beans:property>
</beans:bean>
  • algorithm

    암/복호화 알고리즘이다. 암호화 할 때 쓴 알고리즘 이름을 넣어야 한다. 위 예제에서 사용한 알고리즘은 PBEWithMD5AndDES 이다.
  • passwordEnvName

    암,복호화에 필요한 key password를 지정한 키 값이다.
    key는 자기마음대로 생성이 가능하며 위 예제에서는 TEST_KEY 라는 이름을 사용하였다.
  • 마지막 생성한 Been은 암호화 된 값들이 있는 .properties 파일의 위치를 설정한다.

3. 프로퍼티의 설정

properties 파일은 다음과 같이 생겼다.

db.driver=com.mysql.jdbc.Driver
db.url=ENC(dA5m1XXzMMqixudUjoPtve6hSrKnNgDnG6yXytBcnoSzPx46zNl32Q7y1gvI3jMB)
db.username=ENC(X3scraZNomhTtGD8QAndPw==)
db.password=ENC(eGaAQsn3ejXTMusZjl78sg==)

  • 암호화 시킬 구문은 ENC( .... ) 으로 잡아놓는다.

그래서 암호화 문자열은 어떻게 생성하냐고?

암호화 문자열 생성은 2가지 방법이 있다.

1. 실행파일로 생성하기

http://www.jasypt.org/download.html 로 가서 Jasypt 를 다운로드 받고 압축을 푼다.

해당 폴더의 /bin 으로 들어가 cmd 를 열고 아래와 같이 입력한다.

encrypt input="암호화할 값" password="암호화 키"algorithm="PBEWITHMD5ANDDES"

위의 algorithm 값은 bean을 만들 때 입력했던 부분과

< property name="algorithm" value="......" />

동일해야 한다.

2. 코드로 생성하기

다운받고 하는 과정이 번거로우시면 아래와 같이 테스트코드 작성해서 구하면 된다.

StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
standardPBEStringEncryptor.setPassword("TEST_KEY");
String encodedPass = standardPBEStringEncryptor.encrypt("1q2w3e4r!!");
System.out.println("Encrypted Password for admin is : "+encodedPass);


마치며..

매번 작업을 하면서 보안 정보들이 암호화되어 있지 않았던 부분이 마음에 걸렸지만, 이번 작업을 통하여 어느 정도 보안 되었다는 생각에 뿌듯하다.🧑


Reference

profile
어제의 나를 이기자 🔥

0개의 댓글