$ 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) - 이도원님