Spring Cloud Config - 비대칭키로 properties 암호화하기

salgu·2022년 6월 19일
0

Spring Cloud

목록 보기
5/9

Spring Cloud Config - 비대칭키로 properties 암호화하기


$ keytool -genkeypair -alias apiEncryptionKey -keyalg RSA \
-dname "CN=Salgu1998, OU=API Development, O=salgu.co.kr, L=Seoul, C=KR" \
-keypass "password123" -keystore apiEncryptionKey.jks -storepass "password123"

JDK에 있는 Keytool을 이용하여 인증서를 발급해 줍니다.

Keytool이란
키와 인증서를 관리하는 유틸로서, 개인키 공개키 및 자신이 권한을 부여한 인증서를 관리 할 수 있게 하며, 자료의 보장과 전자서명에 의한 인증을 관리할수 있게 한다. 여기서 생성된 키와 인증서는 keystore라는 곳에 저장을 하게 되며 파일로 구현이 되며, 비밀번호를 이용하여 키나 인증서를 보호한다.

encrypt:
  key-store:
    location: file://${user.home}/keystore/apiEncryptionKey.jks
    password: password123
    alias: apiEncryptionKey

이 후 spring config server에 있는 bootstrap.yml 파일에 위와 같이 인증서를 등록해줍니다


spring config server를 구동한 뒤 해당 서버에 POST /encrypt로 요청해주시고
Body에 Text 형식으로 암호화할 secret key를 보내주시면 암호화된 응답이 옵니다.
(POST /decrypt 형식으로 암호화된 응답을 다시 보내시면 복호화된 응답이 옵니다.)


암호화된 secret key를 위 사진과 같이 '{cipher}SECRET KEY' 형식으로 저장해줍니다.
'{cipher}SECRET KEY'같은 형식으로 넣어주게 되면 해당 내용을 불러올때 그대로 불러오는 것이 아니고
bootstrap.yml에 등록된 인증서 정보로 복호화되어 정보를 읽게 됩니다.

http://{config server uri}/application/default

application : 읽어드릴 yml 파일 이름
default : profile 정보
ex) application-dev
application은 최상위 properties 파일입니다.

위의 경로로 접속하시게 되면 아래와 같은 JSON형식의 데이터를 받고 등록된 secret key 정보가 복호화된 것을 확인할 수 있습니다.

{
  "name": "user-service",
  "profiles": [
  	"default"
  ],
  "label": null,
  "version": null,
  "state": null,
  "propertySources":
    {
      "name": "file:/{경로}/application.yml",
      "source": {
        "token.expiration": 864000000,
        "token.secret": "secret_token_#0",
        "gateway.ip": "{IP}"
      }
    }
}

그 후

POST	http://{server uri}/service/actuator/busrefresh

요청을 보내어 Spring cloud bus에 등록되어 있는 모든 서비스에 일괄적으로 적용시켜 줍니다.





refer :
https://juntheater.tistory.com/entry/keytool를-이용한-키-생성 [=ㅁ=:티스토리]
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) - 이도원님

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

0개의 댓글