[MSA] Config 설정 암호화 #1 (대칭키)

yejin·2024년 11월 26일

MSA

목록 보기
28/36

암/복호화

📌 개요

  • 암호화(Encryption)
    평문 텍스트 ➡ 암호화
  • 복호화(Decryption)
    암호화 ➡ 평문 텍스트
  • 대칭키(Symmetric Encryption)
    암/복호화 시 같은 키 값을 사용
  • 비대칭키(Asymmetric Encryption)
    암/복호화 시 다른 키 값을 사용
    • Private and Public Key
    • 암호화 시 사용했던 키와 다른 키를 사용하면 됨

참고

  • Java Cryptography Extension (JCE)
  • Windows
    • Oracle JDK
      {user.home}\Program Files\Java\jdk-13.0.2\conf\security
  • MacOS
    - Oracle JDK ➡{user.home}/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/security
    - Open JDK
    {user.home}/Library/Java/JavaVirtualMachines/openjdk-14.0.2/Contents/Home/conf/security

📌 소스코드 #1

1️⃣ 단순 암/복호화 테스트

Config Server

  • pom.xml 수정
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  • bootstrap.yml 생성
encrypt:
  key: abcdefghijklmnopqrstuvwxyz0123456789 #임의

💡 추가 설명
대칭 암호화 방식

  • Spring Cloud Config Server에서는 보통 AES(Advanced Encryption Standard) 같은 대칭 암호화 알고리즘을 사용
    ➡ 대칭 암호화는 동일한 키로 데이터를 암호화하고 복호화하는 방식
  • abcdefghijklmnopqrstuvwxyz0123456789라는 32바이트 키는 AES 알고리즘의 대칭 암호화의 키로 사용

📌 실행결과 #1

  • Encrypt (암호화)

  • Decrypt (복호화)

📌 소스코드 #2

2️⃣ H2 Database 정보 암호화

1. user-service

  • application.yml 수정
#  datasource:
#    driver-class-name: org.h2.Driver
#    url: jdbc:h2:mem:testdb
#    username: sa
#    password: 1234

➡ Database 설정 정보를 User-serviceapplication.yml에서 직접 설정하여 적용하는 것이 아니라, Config Server에서 user-service.xml을 만들어 적용할 것이기 때문에 주석

  • bootstrap.yml 수정
spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: user-service #사용하려는 Config 설정 파일 이름 지정
#  profiles:
#    active: dev

2. Config 설정 파일 경로에 user-service.yml 파일 추가

  • user-service.yml 생성
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: 1234

token:
  expiration_time: 86400000
  secret: my_secret_token_by_1126_#2

gateway:
  ip: 192.168.0.100

3. 암호화 키값 확인

  • Encrypt하여 기존 비밀번호 1234에 대한 암호화된 비밀번호 값 확인

4. Config Server의 user-service.yml에 암호화된 비밀번호 설정
➡ 2번의 파일과 동일하며, spring.datasource.password의 값만 암호화된 데이터로 변경함

  • user-service.yml 수정
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: 
    '{cipher}e7327ff17b1b5f955b92043b1dc89a2e44898843fc3cece6ac54656a93277fe0'
    #암호화된 비밀번호

token:
  expiration_time: 86400000
  secret: my_secret_token_by_1126_#2

gateway:
  ip: 192.168.0.100

📌 실행결과 #2

1. 비밀번호 확인

➡ 평문 데이터가 사용됨을 확인 가능
➡ 저장 시점에서 Plain Text가 아닌 암호화된 비밀번호가 저장됨을 알 수 있음

💡 참고
1. 올바르지 않은 암호화된 비밀번호 설정 시
➡ 실행 결과가 <n/a>로 표시 됨

# 예시
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: '{cipher}e7327ff17b1b5f955b92043b1dc89a2e44898843fc3cece6ac54656a93277fe0_wrong'
 # 실행결과
 invalid.spring.datasource.password : "<n/a>"
  1. 암호화 표시 ({cipher})를 안했을 경우
    ➡ 설정된 비밀번호가 암호화된 데이터아닌 평문의 텍스트로 입력된 데이터로 인식됨
# 예시
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password: '7327ff17b1b5f955b92043b1dc89a2e44898843fc3cece6ac54656a93277fe0' 
 # 실행결과
 spring.datasource.password : "7327ff17b1b5f955b92043b1dc89a2e44898843fc3cece6ac54656a93277fe0"

2. H2 Database 접속
127.0.0.1:{port번호}/h2-console

  • 비밀번호 미입력 시

  • 올바른 비밀번호 입력 시

profile
새싹 개발자

0개의 댓글