Private and Public KeyJDK keytool을 이용하여 Private, Public Key 생성
# keystore 파일 생성
$ mkdir keystore
# 위치 이동
$ cd ./keystore
# keytool 생성
$ keytool -genkeypair -alias apiEncryptKey -keyalg RSA -dname "CN=Test Kim, OU=API Development, O=https://github.com/zzzz, L=Seoul, C=KR" -keypass "test1234" -keystore apiEncryptKey.jks ㅊ "test1234"
💡 추가 설명
-genkeypair
키 쌍(공개키와 개인키)을 생성하도록keytool에 지시-alias
생성할 키 쌍의 별칭(alias)을 지정-keyalg
1. 사용할 암호화 알고리즘을 지정
2.RSA는 공개키 암호화 알고리즘으로, 가장 널리 사용되는 알고리즘 중 하나-dname
➡ 키 쌍에 대한구별 이름(Distinguished Name)을 지정하며, 이는 인증서에 포함될 정보로 여러 필드로 나누어짐
1.CN (Common Name): 키를 소유한 사람 또는 엔터프라이즈 이름
2.OU (Organizational Unit): 키를 소유한 부서 또는 팀 이름
3.O (Organization): 조직 이름 또는 회사 이름
4.L (Locality): 도시 이름
5.C (Country): 국가 코드-keypass
개인키를 보호하기 위한 비밀번호를 설정
개인키를 저장할 때 사용되며, 개인키를 사용할 때마다 입력 필요-keystore
생성할 키 저장소(keystore) 파일의 이름을 지정
이 파일에는 키 쌍과 기타 키 저장소 항목이 포함됨-storepass
키 저장소의 비밀번호를 설정하여 키 저장소 파일을 열고 관리할 때 사용됨

$ keytool -list -keystore apiEncryptKey.jks -v
$ keytool -export -alias apiEncryptKey -keystore apiEncryptKey.jks -rfc -file trustServer.cer
인증서 파일 생성 확인


Public Key 생성
➡ 인증서 파일을 .jks 파일로 변환
$ keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks


$ keytool -list -keystore publicKey.jks -v

암호키 설정 적용
Config server의 bootstrap.yml 수정encrypt:
key-store:
location: file:///c:/Users/admin/zzz/keystore/apiEncryptKey.jks #암호키 파일 경로 지정
password: test1234
alias: apiEncryptKey
# key: abcdefghijklmnopqrstuvwxyz0123456789


비밀번호 비대칭키 값 확인

Config 설정파일의 user-service.yml 수정
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password: '{cipher}AQA7s+ZM9LN/Jgo3adyUNHTa52h4/j4yhK98qhPnl6srDiDcT5ClW2wmSXI501GXS/Gy25BjRjHyKiIPoONk36jPsRIozYbfdr1coPrnSmNRiyU0mhVsUzcXlsRDRZAUrtd9nA0p3NI4quxozHov7a8fXwmnUfjB4NlQoXiXOAs0QtjcpaUpfdr0/6HOhaDhfjXjy8atmmsfiGaNByVgP49ddF/gKfk4Wj93GPR6zsvFnvq7zANhVuxvf0Q6xtOekHP1M1gWMTwG600EznUy/xVdgTKREYbvTDvgegKmMEKCKNEpn4CeHMn9cCQatOeoCI5Kan38WWFOAUaavdRZrhLPogfXZq4ZZYZUc3f+G1zUjR7oYvsuD4rheEC/2yJ3Q+Q='
token:
expiration_time: 86400000
secret: my_secret_token_by_1126_#2
gateway:
ip: 192.168.0.100

토큰 정보 암호화

Config 설정파일의 ecommerce.yml 수정
➡ API Gateway의 bootstrap.yml 파일에서 ecommerce 파일을 참조중이기 때문
token:
expiration_time: 86400000
secret: '{cipher}AQAq6bFnyXy6i9/ctqi15Zszksxk3z+cnV6mxVfsgxK6gwVVe1kMPwD/VzSjuyvBC8Bioj0RgCEB1eB7xFvrdfgrGFAB8/wS3IQGxnYx3L2AJ46JlwsqKm1DweYvO0v9xXF0CQHo3Ocf5FoRle1iNoMNegHsWq+cCL+TFxyY+ePFBJhggKyQEOokSKvFHAQ4Ra97ZIRNd0Y1/raWVfQWrlOvU9VToUm/fAiST5c7yLrL1gGO7+J25NB6U5rk7iEuxTnSi0keI1pMAmiqGU4wsVYD01f/TLfL3li35byDHa+peKly/RJrOQOtLry8YAnDhgtqWT87ROc52K/6/m+fAxkKv/kx+eIwxqMLnsBoVG9ZY84Ad/PDZDXP4O5aEwzx4G+Kf4sTC5zVFfm7SXAp3iUO'
gateway:
ip: 192.168.0.100
