Encrypt 라이브러리

EIMS에서 암호화된 설정 값을 복호화하기 위한 라이브러리입니다.

사용자는 민감한 설정 값(예: 데이터베이스 비밀번호, Redis 비밀번호 등)을 암호화하여 저장하고, EIMS 기동 시 본 라이브러리를 통해 자동으로 복호화할 수 있습니다.

패키지 구조

com.tmax.anyeims.encryption
├── Decrypt.java                    # 복호화 인터페이스
├── EncryptionClassProperties.java  # 복호화 클래스 설정 프로퍼티
└── sample
    └── AES256Decrypt.java          # AES256 복호화 기본 구현체

클래스

Decrypt

복호화 클래스를 구현하기 위한 인터페이스입니다.

public interface Decrypt {
    String decrypt(String encryptedData) throws Exception;
    void setKey(String key) throws Exception;
}
메서드 반환 타입 설명

decrypt(String encryptedData)

String

암호화된 문자열을 복호화하여 반환. 복호화 실패 시 예외 발생

setKey(String key)

void

복호화에 사용할 키 설정

setKey 메서드의 key 파라미터 활용

복호화 구현체에 따라 key 파라미터를 다르게 활용할 수 있습니다.

활용 방식 설명

키 값 직접 사용

key 자체를 복호화 키로 사용

키 파일 경로

key에 키 파일 경로를 담아 파일에서 키를 로드

EncryptionClassProperties

복호화 클래스를 로드하기 위한 설정 프로퍼티 클래스입니다.

필드명 타입 설명

key

String

복호화에 사용될 키(또는 키 파일 경로)

className

String

복호화 구현체 클래스의 전체 경로(FQCN)

AES256Decrypt(기본 제공 구현체)

AES256(ECB) 방식의 복호화를 지원하는 기본 구현체입니다.

이 구현체는 setKey()에 키 파일 경로를 전달받아 파일에서 키를 로드합니다.

키 파일 경로 형식

지원되는 키 파일 경로 형식은 다음과 같습니다.

형식 예시 설명

절대 경로

/opt/eims/keys/aes.key

파일 시스템의 절대 경로

상대 경로

./keys/aes.key

실행 디렉토리 기준 상대 경로

클래스패스

classpath:keys/aes.key

클래스패스 내 리소스 경로

사용법

Encrypt 라이브러리는 다음 2가지 방법으로 사용할 수 있습니다.

  • 기본 제공 복호화 방식 사용

  • 직접 복호화 클래스 구현

기본 제공 복호화 방식 사용

com.tmax.anyeims.encryption.sample.AES256Decrypt 클래스를 사용합니다.

  1. 키 파일 생성

    AES256 암호화에 사용한 키 값이 담긴 파일을 생성합니다.

    # 예시: /opt/eims/keys/aes.key 파일 생성
    aaaadfadsfasdfaef123412312345678

    EIMS에서는 보안을 위해 키 값을 직접 명시하지 않고 파일에서 읽는 방식을 사용합니다.

  2. 설정 파일에 복호화 클래스 등록

    application-extensions.yml에 다음 설정을 추가합니다.

    eims:
      encryption:
        decrypt:
          key: "/opt/eims/keys/aes.key"
          class-name: com.tmax.anyeims.encryption.sample.AES256Decrypt
    설정 항목 설명

    key

    키 파일 경로

    class-name

    복호화 구현체 클래스(FQCN)

직접 복호화 클래스 구현

  1. Decrypt 인터페이스를 구현하여 커스텀 복호화 로직을 작성합니다.

    • 구현 예시

      package com.example.encryption;
      
      import com.tmax.anyeims.encryption.Decrypt;
      
      public class CustomDecrypt implements Decrypt {
          private String secretKey;
      
          @Override
          public void setKey(String key) throws Exception {
              // 키 설정 로직 구현
              this.secretKey = key;
          }
      
          @Override
          public String decrypt(String encryptedData) throws Exception {
              // 복호화 로직 구현
              // ...
              return decryptedValue;
          }
      }
  2. JAR 파일 배포

    구현한 Java 프로젝트를 JAR로 빌드한 후, EIMS 설치 디렉토리 내 lib 디렉토리에 위치시킵니다.

    EIMS_HOME/
    └── lib/                        # EIMS 백엔드 JAR 의존성 디렉토리
        └── my-custom-decrypt.jar   # 커스텀 복호화 JAR 파일
  3. 설정 파일 등록

    eims:
      encryption:
        decrypt:
          key: "your-secret-key-or-path"
          class-name: com.example.encryption.CustomDecrypt

암호화된 프로퍼티 값 읽기

복호화 클래스를 활용하여 암호화된 Spring 프로퍼티 값을 자동으로 복호화할 수 있습니다.

설정 방법

  1. 프로퍼티 값 암호화

    민감한 프로퍼티 값을 암호화한 뒤, 암호화된 값으로 교체합니다.

    • 변경 전(평문)

      spring:
        redis:
          host: "192.168.15.11"
          password: "password"
    • 변경 후(암호화)

      spring:
        redis:
          host: "bVzorrOgJrOYBPstwwWH8w=="
          password: "O3MN30KaScUyU9dJXdo23g=="
  2. 암호화된 프로퍼티 목록 지정

    application-extensions.yml에 암호화된 프로퍼티 키를 쉼표(,)로 구분하여 나열합니다.

    eims:
      encrypted-properties: spring.redis.host,spring.redis.password
  3. 복호화 클래스 설정

    복호화 클래스 설정을 함께 추가합니다.

    eims:
      encrypted-properties: spring.redis.host,spring.redis.password
      encryption:
        decrypt:
          key: "/opt/eims/keys/aes.key"
          class-name: com.tmax.anyeims.encryption.sample.AES256Decrypt
  4. EIMS 재기동

    설정 완료 후 EIMS를 재기동하면 지정된 프로퍼티 값이 자동으로 복호화됩니다.

설정 예시

eims:
  # 암호화된 프로퍼티 목록 (쉼표로 구분)
  encrypted-properties: spring.redis.host,spring.redis.password,spring.datasource.password

  # 복호화 클래스 설정
  encryption:
    decrypt:
      key: "/opt/eims/keys/aes.key"
      class-name: com.tmax.anyeims.encryption.sample.AES256Decrypt

# 암호화된 값으로 설정
spring:
  redis:
    host: "bVzorrOgJrOYBPstwwWH8w=="
    password: "O3MN30KaScUyU9dJXdo23g=="
  datasource:
    password: "encrypted-db-password=="

의존성 추가

커스텀 복호화 프로젝트에서 이 라이브러리를 사용하려면 JAR 파일을 직접 프로젝트에 추가합니다.

필요 JAR 파일

파일명 설명

eims-encrypt-{version}.jar

EIMS Encrypt 라이브러리

Maven(로컬 JAR 참조)

<dependency>
    <groupId>com.tmax.anyeims</groupId>
    <artifactId>eims-encrypt</artifactId>
    <version>{version}</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/eims-encrypt-{version}.jar</systemPath>
</dependency>

Gradle(로컬 JAR 참조)

dependencies {
    implementation files('libs/eims-encrypt-{version}.jar')
}