백엔드 Backend/서버 Server

Spring Cloud Config - 정보 암호화

달래dallae 2025. 1. 15. 17:12

application.yml 등의 설정 파일에는 DB의 아이디나 비밀번호 등 민감한 정보가 포함된다.

  spring:
      rabbitmq:
        host: 127.0.0.1
        port: 5672 #web접속은 15672
        username: guest
        password: guest

이 때, 위와 같이 password와 같은 정보를 평문 그대로 설정파일에 노출하게 되면 해킹이나 도난 발생 시 심각한 보안 문제가 될 수 있다.

 

이를 방지하기 위해 설정 정보를 암호화하여 서버에 저장하는 것이 중요하다.

일반적으로는 대칭키 방식비대칭키 방식 두 가지 방법을 사용하여 설정 정보를 암호화할 수 있다.
관리가 까다롭긴 하지만, 보안성을 고려하면 비대칭키 방식이 더 안전하다.

 

Spring Cloud Config서버를 사용하는 경우, 해당 서버에서 설정 파일 암호화 과정을 진행할 수 있다.

 


 

✅ 대칭키 방식 (Symmetric Key)

하나의 같은 키로 암호화 및 복호화를 수행하는 방식이다.

 

1️⃣ 대칭키 설정

encrypt:
  key: abcdefghijklmnopqrstuvwxyz123456789

bootstrap.yml 파일에 대칭키를 설정한다.

  • bootstrap.yml을 사용하려면 Spring Cloud Bootstrap 의존성이 필요하다.
  • bootstrap.yml은 application.yml보다 먼저 로드되기 때문에 편의를 위해 사용한다.

 

2️⃣ API를 이용한 암호화 및 복호화

암호화:

curl -X POST http://localhost:8888/encrypt -d 'mySecretPassword'

복호화:

curl -X POST http://localhost:8888/decrypt -d '{cipher}07ca0a7d65...'

3. 암호화된 값 적용

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: '{cipher}07ca0a7d65ffb0f7cdb2327e929248f88ea3a86c056928a63af7ef7eee347007'
  • password 값은 {cipher}로 시작하며, Spring Cloud Config가 자동으로 복호화한다.
  • 복호화가 불가능한 경우 n/a로 표시된다.

 

✅ 비대칭키 방식 (Asymmetric Key)

🔐 Private Key로 암호화하고, 🔑 Public Key로 복호화하는 방식이다.

(혹은 반대로도 가능하지만 일반적으로 위 방식이 사용된다.)

 

1️⃣  키 생성

JDK의 keytool을 이용해 RSA 키를 생성한다.

keytool -genkeypair
-alias mykey
-keyalg RSA 
-keysize 2048
-validity 3650 
-keystore mykeystore.jks
-storepass mypassword
  • alias를 통해 특정 키를 호출할 수 있다.
  • validity 3650은 10년(3650일) 동안 유효한 키를 생성한다는 의미이다.

 

2️⃣ 비대칭키 설정

encrypt:
  key-store:
    location: classpath:/mykeystore.jks
    password: mypassword
    alias: mykey
bootstrap.yml에 비대칭키 설정을 추가한다.
 
 

3️⃣ 암호화 및 복호화 API 사용

암호화:

curl -X POST http://localhost:8888/encrypt -d 'mySecretPassword'

복호화:

curl -X POST http://localhost:8888/decrypt -d '{cipher}encryptedValue'

 


✅ Spring Cloud Config를 사용하는 경우

Spring Cloud Config를 이용하면 설정 파일을 서버에서 관리하며, 암호화된 값을 자동으로 복호화하여 반환할 수 있다.

 

HTTP GET 요청을 통한 설정 값 확인

curl -X GET http://localhost:8888/application/default

해당 http 요청의 return 값 확인

 
  • {cipher}가 붙어있으면 복호화된 값이 반환된다.
  • {cipher} 없이 요청하면 암호화된 상태 그대로 반환된다.

🔥 정리

  • 설정 파일에 비밀번호를 평문으로 저장하는 것은 위험하다.
  • 대칭키 방식은 설정이 간단하지만 키 관리가 중요하다.
  • 비대칭키 방식은 보안성이 높지만 설정이 복잡할 수 있다.
  • Spring Cloud Config를 사용하면 자동 복호화 기능을 활용할 수 있다.