Spring Cloud Config는 비대칭키, 대칭키 각각 암호화/복호화 방식을 지원한다.
보안 측면에서 public key, private key가 각각 존재하는 비대칭키 방식이 더 안전하다.
대칭키 방식은 암호화/복호화에 같은 키가 사용되므로 키가 유출됐을 때의 위험이 크다는 단점이 있다.
비대칭키 생성
// private key 생성
keytool -genkeypair -alias privateKey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass "password123" -keystore privateKey.jks -storepass "password123" -storetype pkcs12
// 인증서 파일 생성
keytool -export -alias privateKey -keystore privateKey.jks -rfc -file trustServer.cer
// 인증서 파일 -> jks 파일 public key 생성
keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
Java Cryptography Extension (JCE) 설치
자바에서 제공하는 encrypt를 사용하기 위해서는 JCE 다운로드하여 classpath에 등록해주어야 한다.
( 11버전 이후부터는 default로 포함되어 있다고 한다)
( https://www.oracle.com/java/technologies/javase-jce-all-downloads.html )
server - application.yml 설정 추가 ( for encrypt endpoint )
encrypt:
key-store:
location: file:../server/key/privateKey.jks # location of key
alias: privateKey
password: password123
encrypt endpoint
spring cloud config - properties example
spring cloud config - properties 조회
위의 내용을 그림으로 표현하면 아래와 같다.
spring cloud server에서 encrypt, decrypt를 모두 담당하게 된다.
client에게 properties를 전달할 때 decrypt 된 값들을 전달하는 것이다.
Server-Encrypt, Client-Decrypt
위와 같은 형태가 아닌 server에서는 encrypt된 properties를 들고 있고
client에서 해당 properties를 가져갈때 decrypt 하고 싶은 상황에는 아래와 같이 설정하면 된다.
server - application.yml 설정 추가 ( for encrypt endpoint )
spring:
cloud:
config:
server:
encrypt:
enabled: false
encrypt:
key-store:
location: file:../server/key/publicKey.jks # location of key
alias: trustServer
password: password123
server side에서 decrypt 하는 것을 방지하기 위해
spring.cloud.config.server.encrypt.enabled = false로 지정
server side에는 encrypt만 담당하기 위해 public key 등록
client-appliation.yml 설정 추가 decrypt
encrypt:
key-store:
location: file:../sba-server/key/privateKey.jks
alias: privateKey
password: 1q2w3e4r
'Spring > spring-cloud' 카테고리의 다른 글
[Spring] Spring Cloud Gateway(SCG) 사용해보기 (0) | 2022.04.12 |
---|---|
[Spring] ActiveMQ - Spring 사용해보기 (0) | 2022.04.10 |
[Spring] Spring Cloud Config-Symmetric Key Encryption(대칭키 암호화) (0) | 2022.01.03 |
[Spring] Exception 처리(@ControllerAdvice, @ExceptionHandler, @RestControllerAdvice) (0) | 2021.12.29 |
[Spring] Spring Cloud Config 사용해보기 (Client) (0) | 2021.08.02 |