[MSA] Config 설정 암호화 #2 (비대칭키)

yejin·2024년 11월 27일

MSA

목록 보기
29/36

암/복호화

📌 개요

  • 암호화(Encryption)
    평문 텍스트 ➡ 암호화
  • 복호화(Decryption)
    암호화 ➡ 평문 텍스트
  • 대칭키(Symmetric Encryption)
    암/복호화 시 같은 키 값을 사용
  • 비대칭키(Asymmetric Encryption)
    암/복호화 시 다른 키 값을 사용
    • Private and Public Key
    • 암호화 시 사용했던 키와 다른 키를 사용하면 됨

📌 소스코드 #1

JDK keytool을 이용하여 Private, Public Key 생성

1️⃣ Private 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
    키 저장소의 비밀번호를 설정하여 키 저장소 파일을 열고 관리할 때 사용됨

📌 실행결과 #1

  • 상세 내용 확인
    $ keytool -list -keystore apiEncryptKey.jks -v

📌 소스코드 #2

2️⃣ Public Key 생성

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

  • Public Key 생성
    ➡ 인증서 파일을 .jks 파일로 변환

$ keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks

📌 실행결과 #2


  • 상세 내용 확인
$ keytool -list -keystore publicKey.jks -v

📌 소스코드 #3

3️⃣ 암호키 테스트

암호키 설정 적용

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

📌 실행결과 #3

  • 암호화
  • 복호화

📌 소스코드 #4

4️⃣ H2 Database 비밀번호 비대칭키 암호화 적용

  • 비밀번호 비대칭키 값 확인

  • 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

📌 실행결과 #4

📌 소스코드 #5

5️⃣ Token.secret 암호화 적용

  • 토큰 정보 암호화

  • 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

📌 실행결과 #5

profile
새싹 개발자

0개의 댓글