Tech: Cloud
최종 편집 일시: 2024년 7월 20일 오후 6:39
서버에 아래의 POST 요청을 통해 암호화, 복호화 요청을 보낼 수 있다.
{{base-uri}}/encrypt
: 암호화{{base-uri}}/decrypt
: 복호화{cipher}
이라는 문구를 암호화된 문자열 앞에 붙여주면 Config Server 가 암호화된 문자열인 것을 인식하게 된다.dependency 추가
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
Config Server 의 application.yml
와 동일한 위치에 bootstrap.yml
파일 추가
encrypt:
key: Pl0YADvlwQNbNzyzu1jhFQxm52aUm0KpQYosvNfEXbosfx2UyF
Postman 을 이용하여 Database password 암호화
User Service 의 application.yml
의 Database 정보 삭제
spring:
application:
name: user-service
h2:
console:
enabled: true
# datasource:
# url: jdbc:h2:mem:testdb
# driver-class-name: org.h2.Driver
# username: sa
# password: 1234
User Service 의 bootstrap.yml
의 정보 수정
Config Server에서 읽어오는 정보를 변경 (config-server
→ user-service
)
spring:
cloud:
config:
name: user-service
uri: http://127.0.0.1:8888
config-server가 환경 정보를 읽어오는 파일을 수정
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password: "{cipher}8da2dc81d9224a5f14db816e22202dce088d6a3d2d68b3e7a9ba88c8eeb1e912"
token:
expiration_time: 86400000
secret: native-jGCgrTB9PGo7dtQCjOC18iCNQNlW8PWooUKb0k5GgSFUGMDKT2_changed#2
gateway:
ip: 192.168.0.15
{cipher}
을 추가Config Server에서 Decryption이 되었는지 확인
spring.datasource.password
를 보면 암호화하기 이전의 값으로 디코딩된 것을 확인Public, Private Key 는 서로 다르게 생성 → JDK keytool 이용
$ mkdir ${user.home}/Desktop/Work/keystore
폴더 생성 (편한곳)
keytool 의 key 생성 명령을 이용하여 key 생성
keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=duckbill, OU=API Development, O=duckbill.co.kr, L=Seoul, C=KR" -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"
Key 생성 확인
keytool -list -keystore apiEncrytionKey.jks -v
생성된 Key 를 이용하여 공개키 생성
keytool -export -alias apiEncryptionKey -keystore apiEncrytionKey.jks -rfc -file trustServer.cer
생성된 공개키를 이용하여 다시 jks Key 생성
keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
키 저장소 비밀번호 입력:
새 비밀번호 다시 입력:
keytool 오류: java.lang.Exception: 입력이 X.509 인증서가 아닙니다.
Config Server 의 bootstrap.yml
변경
비대칭키 위치를 지정
encrypt:
# key: Pl0YADvlwQNbNzyzu1jhFQxm52aUm0KpQYosvNfEXbosfx2UyF
key-store:
location: file:///${user.home}/native-file-repo/keystore/apiEncryptionKey.jks
password: 1q2w3e4r
alias: apiEncryptionKey
Config Server에 POST 요청을 통해 키를 암호화
Config Server 의 환경 변수 수정
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password: "{cipher}8da2dc81d9224a5f14db816e22202dce088d6a3d2d68b3e7a9ba88c8eeb1e912"
token:
expiration_time: 86400000
secret: "{cipher}AQBwAX+GLjXF0QKD9lJxJx2Z+VhBFMkrb5Jv/KjB94qIdpsExjPkofkV70mpivRhECmu5YiXQ5xRRTeF3Tw/WTPhIr28MY+kEbffwQ0xW1xtnZt/9DeXLyJDoANHHJuC8WCtGg9+jFAZbAfOTIj2kMqOi8puUBSK4pe57PJbrc9gK/xGtyqGKluiEi+6g4LRZQoajw4S3l0yMOaHrbpNpFWsejQXyznBSovpagR4CNdZXU7n8gM1R7qDgH2SueqnpiSpmJtjt1RkdPK/24OENRzrnCpYrF2pAIiyxXzo90AmCh5GmA5uLtYbGiCUrGner8OsYqvUt45ukP5bbuX/XGfEWcS1WMLGTi21+67phOJsAcWIAox7i1NnZwgh4hSlekA="
gateway:
ip: 192.168.0.15