설정정보의 암호화

이원석·2023년 11월 13일

SpringCloud

목록 보기
5/5
post-thumbnail
본 내용은 인프런의 이도원님의 SpringCloud 강의를 참고하여 작성되었습니다.

이전 포스팅에서 대칭키와 비대칭키 방식과 이에 사용되는 공개키 개인키에 대해 간단하게 알아보았다. 해당 대칭키 전략을 적용하여 설정정보 파일의 중요한 정보들을 암호화 해보자.


1. 대칭키를 사용하는 방식

1-1. 의존성 추가

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
}

encrypt.key는 application.yml 에서 정의하는 것이 아니라 bootstrap.yml 에서 정의하고 그 값을 가져 오기때문에 bootstrap을 사용하기 위한 의존성을 추가해야 한다.


1-2. bootstrap.yml

encrypt:
  key: [사용할 대칭키]

대칭키로 사용될 키를 명시해주면 끝!


1-3. 암/복호화

Config Server의 Port로 encrypt/decrypt 요청을 보내게 되면 등록한 encrypt.key를 대칭키로 사용하여 암/복호화를 진행한다.

이후 설정정보 파일에서 암호화 된 값으로 변경해주자.


password: '{cipher}abcdefg...'

암호화 된 값임을 명시하는 {cipher} 키워드를 포함시켜야 한다.



2. 비대칭키를 사용하는 방식

공개키 암호화 방식 vs 비밀키 암호화 방식

  • 공개키 암호화 방식: 공개키로 데이터를 암호화 하고 전달받은 데이터를 비밀키로 암호화 한다. 이경우는 데이터의 보안이 중시되는 경우에 사용된다.

  • 비밀키 암호화 방식: 비밀키로 데이터를 암호화 하고 공개키와 함께 암호를 전달한다. 이 경우를 전자서명 방식으로 사용하며, 데이터의 보안보다는 송신자의 신원 확인을 목표로 한다. 송신받은 데이터를 공개키로 복호화에 성공하게 되면 송신자가 전달했다는 것이 증명되기 때문이다.


2-1. JKS(private Key) 생성

비대칭키 방식에는 암/복호화에 서로 다른 키가 사용되어야 한다. 비밀키와 이에 파생된 공개키를 생성하기 위해 JDK KeyTool을 사용해보자.

키 페어를 생성하기 위해서는 KeyTool 유틸리티 명령어가 필요하다. jks를 생성하고자 하는 디렉토리에서 해당 명령어를 입력하자.

keytool -genkeypair \ - 키 페어 생성 명령
-alias apiEncryptionKey \ - 별칭
-keyalg RSA \ - 암호화 알고리즘
-dname "CN=Wonseok Lee, OU=API Development, \ - 주체 이름 DN 설정
O=bookdodum.co.kr, L=Seoul, C=KR" 
-keypass "test1234" \ - 개인 키를 저장할 때 사용할 암호
-keystore apiEncryptionKey.jks \ - 키 스토어 파일의 이름
-storepass "test1234" - 키 스토어 파일의 암호

아래의 명령어로 생성된 jks 파일의 정보를 출력해보자.

keytool -list -keystore apiEncryptionKey.jks -v

인증서의 고유 식별자, 타입, 주체 등 다양한 정보를 확인할 수 있는데, Entry Type을 확인해보면 PrivateKey인것을 알 수 있다. 비대칭키 방식을 사용하기 위해서 apiEncryptionKey를 통해 파생된 공개키를 생성해야 한다.


2-2. bootstrap.yml

encrypt:
  key-store:
    location: file://${user.home}/Desktop/work/keystore/apiEncryptionKey.jks
    password: test1234
    alias: apiEncryptionKey

대칭키 방식과는 다르게 Java KeyStore(jks) 파일의 위치를 명시해주어야 한다.


2-3. 공개키 생성

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

공개키를 생성하기 위한 인증서 파일을 apiEncryptionKey로 부터 추출하자.

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

인증서를 기반으로 공개키를 생성하자.

필요한 경우에 이 공개키를 활용할 수 있다.


2-4. 암/복호화

Config Server의 Port로 encrypt/decrypt 요청을 보내게 되면 등록한 jks를 대칭키로 사용하여 암/복호화를 진행한다.

jks에는 공개키/개인키 쌍이 저장되어 있으므로 비대칭키 전략을 사용한다고 볼 수 있다.





참고문헌
Inflearn: Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의자료

0개의 댓글