반응형

환경: springboot2.7.6, java 17, springcloud 2021.0.8

이전글:

2024.01.29 - [개발/spring] - [cloud] 파일을 동적으로 관리하는 config server

2024.01.29 - [개발/spring] - [cloud] spring cloud bus

spring cloud config service에서 파일로 관리되는 설정파일을 공용으로 쓰도록 설정되어 있고(native방식)

해당 설정파일에는 디비 연결 정보가 들어있어 password와 같은 민감정보가 있다.

파일로 관리되기 때문에 파일이 노출되면 민감정보가 바로 드러나게 되는데, 이를 암호화해서 관리해보자.

 

비대칭키 사용

1. config 서버에 암복호화 추가

config server에 bootstrap.yml을 만들고 암호화에 사용할 대칭키를 입력한다.

encrypt:
  key: abcdefghijklmnopqrstuvwxyz0123456789

암호화 확인

복호화 확인

 

2. 공용으로 관리하는 설정 파일(bootstrap.yml에 명시된 name)에 아래와 같이 내용 추가

password는 plain으로 sa인데 위의 암호화 api로 암호화 한 값을 넣었

spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:test
    username: sa
    password: '{cipher}07407f328f8c2ba016949743f42e0a9da120328d9e0f44f38bad351b9c2b7419'

 

참고로 설정 서버에 직접 파일을 확인하면 아래와 같이 복호화된 값이 나온다. 이 값이 cloud bus 로 연결된 사용처들에게 전달되는 값이다.

참고로 프로퍼티에 암호화된 값이 잘못되었을 경우 위의 password 부분에 n/a라고 표시된다.

 

대칭키 사용

RSA 키쌍 생성

keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR"  -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"

keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR"  -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"

private key 확인

 keytool -list -keystore apiEncryptionKey.jks -v

인증서 가져오기

 keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer

공개키 가져오기

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

확인

테스트: 위와 동일한 방법

위와 동일하게 파일에는 암호화 값이 있고 사용시에는 자동으로 복호화 해준다.

728x90
반응형

+ Recent posts