반응형
본 내용은 인프런의 이도원 님의 강의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)" 내용을 바탕으로 정리한 내용입니다.
Java KeyStore(JKS)
- 자바 애플리케이션에서 키와 인증서를 안전하게 저장하고 관리하는 저장소'
- JKS 파일은 개인 키, 공개 키, 비밀 키, 인증서를 포함할 수 있으며,
keytool
유틸리티를 사용하여 생성, 관리 및 사용하는 것이 일반적이다.
대칭 키 암호화
- 암호화와 복호화에 동일한 키를 사용한다.
- 일반적으로 비대칭 키 암호화보다 빠르다.
- 키가 노출되면 암호화된 데이터가 노출될 수 있다.
대칭 키 암호화 실습
1. ConfigService
bootstrap.yml 추가
encrypt:
key: YourEncryptionKey123456789
UserService 수정
bootstrap.yml
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: userService
# profiles:
# active: dev
2. 설정파일 수정
userService.yml
sspring:
datasource:
driverClassName: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/shop_db?characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: '{cyper}3146284c596286bcc58e04a44ea6c7580c6840cee9889c638f3699dd5af4b2df'
token:
expiration_time: 864
secret: YourUserSuperSecretKeyForJwtHS256Algorithm
gateway:
ip: 127.0.0.1
- 포스트맨을 사용하여 raw에 비밀번호를 입력하고 http://127.0.0.1:8888/encrypt 를 호출해서 암호화된 비밀번호를 반환하여 password에 입력한다.
- '{cyper}암호화된 비밀번호' 라고 표시하면 암호화된 문자라는 걸 표현할 수 있다.
결과 확인
{
"name": "userService",
"profiles": [
"default"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "file:/C:/MSA/native-file-lepo/userService.yml",
"source": {
"spring.datasource.driverClassName": "org.mariadb.jdbc.Driver",
"spring.datasource.url": "jdbc:mariadb://localhost:3306/shop_db?characterEncoding=UTF-8&serverTimezone=UTC",
"spring.datasource.username": "root",
"spring.datasource.password": 1234,
"token.expiration_time": 864,
"token.secret": "YourUserSuperSecretKeyForJwtHS256Algorithm",
"gateway.ip": "127.0.0.1"
}
},
{
"name": "file:/C:/MSA/native-file-lepo/application.yml",
"source": {
"token.expiration_time": 864000000,
"token.secret": "YourSuperSecretKeyForJwtHS256Algorithm_changed_#1",
"gateway.ip": "127.0.0.1"
}
}
]
}
- http://127.0.0.1:8888/userService/default 호출하면 비밀번호가 복호화된 상태로 표시된다.
비대칭키 암호화
- 두 개의 키를 사용하는데 공개 키는 암호화에 사용되며, 개인 키는 복호화에 사용한다.
- 공개 키를 자유롭게 배포할 수 있지만, 개인 키는 안전하게 보호해야 한다.
- 대칭 키 암호화보다 일반적으로 느리다.
비대칭키 암호화 실습
1. keystore 파일과 인증서 생성
# 폴더 생성
mkdir C:\MSA\keystore
# Java의 `keytool`을 사용하여 RSA 키 쌍을 생성
keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr L=Seoul, C=KR" -keypass "sjmoon1234" -keystore apiEncryptionKey.jks -storepass "sjmoon1234"
# apiEncryptionKey.jks 상세 정보 출력
keytool -list -keystore apiEncryptionKey.jks -v
# `apiEncryptionKey` 별칭을 가진 인증서를 내보내고, 이를 `trustServer.cer` 파일에 저
keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer
# 인증서로 공개 keystore 파일 생성
keytool -import alias trustServer -file trustServer.cer -keystore publicKey.jks
- dir로 해당 디렉토리를 확인하면 apiEncryptionKey.jks, publicKey.jks, trustServer.cerr가 생성된 것을 확인할 수 있다.
2. ConfigService
bootstrap.yml
encrypt:
key-store:
location: file:///C:\MSA\keystore/apiEncryptionKey.jks
password: sjmoon1234
alias: apiEncryptionKey
# key: YourEncryptionKey123456789
3. 설정 파일
userService.yml
spring:
datasource:
driverClassName: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/shop_db?characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: '{cipher}AQBwDJWPo1chyTQCyBUkW4h8MyUsvi64yGjgDjFSPUA6/Qjvy9eQJq5NqglTTiAVYdD/jpgwwExbHc/tdUjxknL3QD4Lhbb93EHPUy17Z/rbkbBkiQRMYfZsK0j9oZBvpR/GMqCR2pZXM+x4YMsp94UsBOZhCiwgvZrofEPZySAqtgsMCHA4daUm7iSKinvVQAfRKAJwZOSnka/gPhBCDThL+BptsYfAV1KvuC0pXlc0CMFFt4uihwRUfGbondRKmRjsDQMgk5cnwRkwz//mqHMCTAsLI95fzTGSE9sXzTgQiR9Vm11UercxJKLD00FHF6g4FoVwiP4b//mXNnaEudQd8gueuhY7Nd4w4JRhHq49rjliFLbQNNvagQdfYbO7ZEc='
- 포스트맨을 사용하여 raw에 비밀번호를 입력하고 http://127.0.0.1:8888/encrypt 를 호출해서 비대칭키로 암호화된 비밀번호를 반환하고 password에 입력한다.
결과 확인
{
"name": "userService",
"profiles": [
"default"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "file:/C:/MSA/native-file-lepo/userService.yml",
"source": {
"spring.datasource.driverClassName": "org.mariadb.jdbc.Driver",
"spring.datasource.url": "jdbc:mariadb://localhost:3306/shop_db?characterEncoding=UTF-8&serverTimezone=UTC",
"spring.datasource.username": "root",
"spring.datasource.password": 1234,
"token.expiration_time": 864,
"token.secret": "YourUserSuperSecretKeyForJwtHS256Algorithm",
"gateway.ip": "127.0.0.1"
}
},
{
"name": "file:/C:/MSA/native-file-lepo/application.yml",
"source": {
"token.expiration_time": 864000000,
"token.secret": "YourSuperSecretKeyForJwtHS256Algorithm_changed_#1",
"gateway.ip": "127.0.0.1"
}
}
]
}
- http://127.0.0.1:8888/userService/default 호출하면 비밀번호가 복호화된 상태로 표시된다.
반응형
'Cloud > MSA' 카테고리의 다른 글
[MSA] Apache Kafka (0) | 2024.12.02 |
---|---|
[MSA] Feign Client (0) | 2024.12.02 |
[MSA] Spring Cloud Bus (0) | 2024.12.02 |
[MSA] Spring Cloud Config (0) | 2024.12.02 |
[MSA] MicroService 구현(로그인) (0) | 2024.11.27 |