MSA 공부 (암호화/복호화) - 18

진병욱·2023년 11월 21일

Spring Cloud MSA 공부

목록 보기
18/20
post-thumbnail

먼저 글 작성에 앞서 해당 시리즈는 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 참고하여 필요한 내용들을 정리한 것임을 밝힙니다.

암호화

대칭 암호화

  • 암/복호화 둘 다 하나의 키를 사용
  • 보안적으로 좋지 않음
    • 그 이유는 하나의 키로 암/복호화 모두 진행하기 때문에 키 공유 문제가 있음 (키를 사용하는 사람이 늘어나게 되면 이를 관리하기 어려움)

비대칭 암호화

  • 암호화와 복호화시에 사용하는 키가 다름
  • 공개키로 암호화를 하고, 개인키로 복호화를 진행
  • 암호화는 누구나 가능하고, 복호화는 개인키를 알고 있는 경우 가능
    • 위에서 언급된, 키 공유 관련 문제를 해결

Java에서의 사용

key-tool

  • 자바에서는 해당 라이브러를 통한 암/복호화 가능

yaml 파일에 설정 정보를 담은 채로, 이를 사용하게 되면 이 파일이 노출되었을 때, 누구나 이 정보를 활용할 수 있기 때문에, 암호화 처리를 하여 저장을 하고, 이를 사용할 때는 복호화해야 한다.

대칭 암호화 사용하기

사전 준비

  • bootstrap 종속성을 사전에 추가했다면, 따로 추가할 종속성은 없다.
  • bootstrap.yml에 대칭키 사용을 위한 키를 추가
encrypt:
  key: 12345667890

암호화

  • http://URI:[port]/encrypt 로 body에 text형식으로 작성하여 값을 POST 요청으로 보내면 암호문 확인 가능

복호화

  • http://URI:[port]/decrypt 로 body에 text형식으로 암호문을 넣어서 POST 요청으로 보내면 복호문 확인 가능

yaml 파일에 적용

  • 해당 설정을 적용할 yaml파일의 설정에 암호문을 넣고 앞에 {cipher}를 추가하면 이를 spring이 확인하여 복호화하여 사용
    spring:
      rabbitmq:
        host: localhost
        port: 5672
        username: "{cipher}d1adad62178fa8f9ff47d43f67ba01a7b37f01cf15d3d787955b6aff41f91ca9"
        password: "{cipher}81ac0762a32606aeea0c0e3554082fbed461ef8642687e1c085516b8ba44a2e1"

비대칭 암호화 사용하기

사전 준비 (JDK keytool 사용)

  1. 개인키 생성
  2. 인증서 생성
  3. 공개키 생성

개인키 생성

keytool -genkeypair -alias 별칭 -keyalg RSA -dname "CN=이름, OU=API Document, O=도메인, L=Seoul, C=KR" -keypass "비밀번호" -keystore 저장파일명.jks -storepass "비밀번호"

인증서 생성

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

공개키 생성

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

생성된 개인키 및 공개키 확인

  • 개인키
keytool -list -keystore apiEncryptionKey.jks
  • 공개키
keytool -list -keystore publicKey.jks

키 사용

yaml 파일에 설정 추가

encrypt:
  key-store:
    location: file://[파일위치]
    alias: [별칭]
    password: [비밀번호]

암호화

복호화

yaml 파일에 적용하는 것은 대칭 암호화와 방식이 동일

문제점

  • 위와 같이 설정했을 때 문제가 있다.
  • 암호화를 사용하는 이유는 설정 파일이 노출되었을 때의 2차, 3차 사고를 방지하기 위함인데, 지금 상태로 사용을 하게 되면, config server에 접속을 하면 복호화된 설정 파일을 확인 할 수 있다.

따라서 아래와 같이 bootstrap.yml에 설정을 추가하여 추가 보안을 설정해야 한다.

spring:
  cloud:
    config:
      server:
        encrypt:
          enabled: false

위 설정은 client에게 설정 파일을 제공할 때, 암호화문으로 제공하겠다는 설정이다. (default true)
이렇게 설정을 하면 기본적인 config server의 보안 설정이 끝난다.
다만 config server에 접속하면 암호문 확인은 가능하다.
추후에 config server 접속 권한을 제어하는 방식으로 추가 보안 설정이 가능할 듯 싶다.

profile
새로운 기술을 접하는 것에 망설임이 없고, 부족한 것이 있다면 항상 배우고자 하는 열정을 가지고 있습니다!

0개의 댓글