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에 키 파일 경로를 담아 파일에서 키를 로드 |
사용법
Encrypt 라이브러리는 다음 2가지 방법으로 사용할 수 있습니다.
-
기본 제공 복호화 방식 사용
-
직접 복호화 클래스 구현
기본 제공 복호화 방식 사용
com.tmax.anyeims.encryption.sample.AES256Decrypt 클래스를 사용합니다.
-
키 파일 생성
AES256 암호화에 사용한 키 값이 담긴 파일을 생성합니다.
# 예시: /opt/eims/keys/aes.key 파일 생성 aaaadfadsfasdfaef123412312345678EIMS에서는 보안을 위해 키 값을 직접 명시하지 않고 파일에서 읽는 방식을 사용합니다.
-
설정 파일에 복호화 클래스 등록
application-extensions.yml에 다음 설정을 추가합니다.
eims: encryption: decrypt: key: "/opt/eims/keys/aes.key" class-name: com.tmax.anyeims.encryption.sample.AES256Decrypt설정 항목 설명 key
키 파일 경로
class-name
복호화 구현체 클래스(FQCN)
직접 복호화 클래스 구현
-
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; } }
-
-
JAR 파일 배포
구현한 Java 프로젝트를 JAR로 빌드한 후, EIMS 설치 디렉토리 내 lib 디렉토리에 위치시킵니다.
EIMS_HOME/ └── lib/ # EIMS 백엔드 JAR 의존성 디렉토리 └── my-custom-decrypt.jar # 커스텀 복호화 JAR 파일 -
설정 파일 등록
eims: encryption: decrypt: key: "your-secret-key-or-path" class-name: com.example.encryption.CustomDecrypt
암호화된 프로퍼티 값 읽기
복호화 클래스를 활용하여 암호화된 Spring 프로퍼티 값을 자동으로 복호화할 수 있습니다.
설정 방법
-
프로퍼티 값 암호화
민감한 프로퍼티 값을 암호화한 뒤, 암호화된 값으로 교체합니다.
-
변경 전(평문)
spring: redis: host: "192.168.15.11" password: "password" -
변경 후(암호화)
spring: redis: host: "bVzorrOgJrOYBPstwwWH8w==" password: "O3MN30KaScUyU9dJXdo23g=="
-
-
암호화된 프로퍼티 목록 지정
application-extensions.yml에 암호화된 프로퍼티 키를 쉼표(,)로 구분하여 나열합니다.
eims: encrypted-properties: spring.redis.host,spring.redis.password -
복호화 클래스 설정
복호화 클래스 설정을 함께 추가합니다.
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 -
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=="