Encryption 종류
Symmetric Encryption (Shared)
- 대칭키
Asymmetric Encryption (RSA Keypair)
- 비대칭키(private, public key)
- 자바에선 keytool를 사용
- 복호화할때는 암호화할때 사용하지 않았던 키를 사용
- 암호화 -> public, 복호화 -> private
- 암호화 -> private, 복호화 -> public
대칭키를 이용한 암호화
Config server에 Dependencies 추가
- spring-cloud-starter-bootstrap
encrypt:
key: abcdefghijklmnopqrstuvwxyz0123456789
테스트
- 127.0.0.1:8888/encrypt POST
- 127.0.0.1:8888/decrypt POST
Users Microservice의 application.yml 수정 -> Config Server의 user-service.yml로 이동
user-service.yml 생성해서 DB를 관리하도록 한다.
Users Microservice 의 H2 Database의 Password를 Encryption
{cipher}를 사용해서 암호화 여부를 확인한다.
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password: '{cipher}80099d84cfdfc9defd05eec399466ba713caf0e19b50682b7a71cb76e654d437'
127.0.0.1:8888/user-service/default 로 확인
-> user-service에서 사용하는 시점이라서 복호화된 암호가 출력된다.

-> 암호화된 데이터가 잘못입력되면 ""로 사용할 수 없도록 출력된다.

h2-console 테스트
password까지 입력해서 로그인해야 한다.

비대칭키를 이용한 암호화
Public, Private Key 생성 -> JDK keytool 사용
RSA 암호화
# 폴더 생성
$ mkdir ${user.home}/Desktop/Work/keystore
# 키 생성
$ keytool -genkeypair -alias apiEncryptionKey -keyalg RSA
-dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR"
-keypass "1q2w3e4r" -keysotre apiEncryptionKey.jks -storepass "1q2w3e4r"

Private Key

Public Key 추출 (.cer 인증서 파일)

인증서 파일을 Public Key로

config Server 에서는 Private Key만 사용 (인증서, public key는 다른곳으로 전달해서 사용)
application.yml
encrypt:
# key: abcdefghijklmnopqrstuvwxyz0123456789
key-store:
location: file://${user.home}/Documents/keystore/apiEncryptionKey.jks
password: test1234
alias: apiencryption
user-service.yml
DB 비밀번호 비대칭키로 변경
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password: '{cipher}AQAXmYVyFMzR/ddv2mg8/lq/jxBAdQero6+ckwPOIzxdKIDaXBGTogOSkw4S88xf1baLa0S2xd2T3Jb+pH50L+4SByQ5ABn1muxYMA8o9RPf/jpm/XCM9z2387GTG6BoHuhxVchdlkvuSmfSNFRHLUomOnK1M0uRmVIKG5owprHKccV9F3o+Nf/5Dr4tDVNNq6gfIPeIN16Y1Z7zTDh8GyyJeAUHhZELC++X2tJEsc0MR41wX4Z4VK9AENLKyViX8eFMvonwTeSV9MBio6iwA8evaKYXPCDrVcmGJn7odS2KyxjzGNR/44VgrkJGIPMMjNCDIRi9987LFMAYW3yG5CN19AXlnJorZKf7kTmEpAtsbcAkiCYhsBQaPr1RURzppnQ='
ecommerce.yml
토큰 secret 변경
token:
expiration_time: 86400000
secret: '{cipher}AQAXEY0BliCdgg9SOvEt763kVlieMuOxCoQkGofMU+5aCfmwibiSeiq989Ix4jAhM0tDuCa+wlInztkJpfOo1uOSc1guGbBfy6jRHtDhEUzd2mW9thTdVqTIYZ8/XyY5EeTklq6QitPNX0BgidVyJOjn75fEo6QeR/3PTFlbyjyJ4EltkYYlvkJ2igGTWktwCORHOwpABKjCbhqm+HWLdEDE0WKHHl8JZhs02nm/LCW0a7jpiGys5sf7lowuzsP4LJTSJkme+Wm1Da2L42xQriBakiL63vi3dtDWUUItj8IA2rx03IOwzoIHC9gQTRUCy+kqlF+jyia68saEcvEr7KdtExyFZzoXChhMuPJXsVm6sHRrM23WZDAoIQag49a+Lg0oMw38k+qabQMRzTWW3sf/'
여기선 ecommerce.yml이랑 user-service.yml 의 토큰값을 맞춰줘야 한다.
상위에 있는 파일에 정보를 모아주고 다른 파일에서는 그 정보를 삭제한다.
'Spring > [인프런] Spring Cloud' 카테고리의 다른 글
데이터 동기화를 위한 Kafka 활용 1 (0) | 2022.06.30 |
---|---|
Microservice간 통신 (0) | 2022.06.28 |
Spring Cloud Bus (0) | 2022.06.24 |
Configuration Service (0) | 2022.06.24 |
Users Microsservice - Login (0) | 2022.06.20 |