๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“”๊ฐ•์˜ ์ •๋ฆฌ ๋…ธํŠธ

[Spring Cloud๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค] Section. 9 ์•”ํ˜ธ์ฐจ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Encryption๊ณผ Decryption

Encryption types (์•”ํ˜ธํ™” ํƒ€์ž…)

  • Symmetric Encryption (์•”๋ณตํ˜ธํ™” ๊ฐ™์€ ํ‚ค)
  • Asymmetric Encryption (์•”๋ณตํ˜ธํ™” ๋‹ค๋ฅธ ํ‚ค)[private - public key]

 

์•”.๋ณตํ˜ธํ™” ๊ตฌ์„ฑ๋„

์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

์•”.๋ณตํ˜ธํ™” ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

config-server์— 'ecrypt.key' ๊ฐ’์„ bootstrap.yml์— ์„ค์ •ํ•ด๋‘”๋‹ค.

์„œ๋ฒ„๋ฅผ ์žฌ์‹คํ–‰ํ•˜์—ฌ 'POST /encrypt'๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋ฅผ 'POST /decrypt'๋ฅผ ํ†ตํ•ด ๋ณตํ˜ธํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ์ •๋ณด ์•”๋ณตํ˜ธํ™” ์ ์šฉ

user๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์žˆ๋˜ datasource์„ค์ • ์ •๋ณด๋ฅผ password ์•”ํ˜ธํ™”ํ•˜์—ฌ config-server์˜ user-service.yml ํŒŒ์ผ๋กœ ์˜ฎ๊ฒจ๋†“๊ณ  user์„œ๋น„์Šค์—์„œ๋Š” config-server์—์„œ ํ•ด๋‹น์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

 

  • ์ ์šฉ ์ˆœ์„œ
    • 1. config-server์— encrypt.key ์„ค์ •
    • 2. user์„œ๋น„์Šค์˜ datasource์ •๋ณด๋ฅผ config-server์˜ ์„ค์ •์ •๋ณด์— ์•”ํ˜ธํ™”ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅ
    • 3. user์„œ๋น„์Šค์—์„œ ์„ค์ •์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๊ฐ€์ ธ์™€ database์— ์ ‘๊ทผ

๋น„๋Œ€์นญํ‚ค - Keytool (์•”๋ณตํ˜ธํ™”๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค)

Public, Private Key ์‚ฌ์šฉํ•˜๋Š” ๋น„๋Œ€์นญํ‚ค

 

1. keytool์„ ์ด์šฉํ•ด Private key์ƒ์„ฑํ•˜๊ธฐ

$> keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=yunhwan Park, OU=API Development, O=gmail.com, L=Seoul, C=KR" -keypass "test1234" -keystore apiEncryptionKey.jks -storepass "test1234"

 

- Key ์ •๋ณด ํ™•์ธํ•˜๊ธฐ

$> keytool -list -keystore apiEncryptionKey.jks -v
[Enter password]

- ์ธ์ฆ์„œ ์ƒ์„ฑํ•˜๊ธฐ

$> keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -f
[Enter Password]

- Public Key ์ƒ์„ฑ๊ณผ ์ธ์ฆ

$> keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.j
ks

์ƒ์„ฑ๋œ Private, Public, ์ธ์ฆ์„œ

 

2. config-server๊ฐ€ ์ฐธ์กฐํ•  encrytion.key ์„ค์ •

bootstrap.yml ํŒŒ์ผ์— key์ •๋ณดํŒŒ์ผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•จ

encrypt:
  #key: abcdefghijkmasdfji1235412351234
  key-store:
    location: file://${user.home}/ํŒŒ์ผ๋””๋ ‰ํ† ๋ฆฌ์ •๋ณด/apiEncryptionKey.jks
    password: test1234
    alias: apiEncryptionKey

 

3. 'POST /encrypt'๋กœ ๋งŒ๋“  ์•”ํ˜ธํ™” ๋ฐ์ดํ„ฐ๋ฅผ token.secret ์ •๋ณด๋กœ ์„ค์ •

token:
  expiration_time: 864000000
  secret: '{cipher}AQAfgwczinpwugpt/nNxeZFAOxWnH' # ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ

 

์ด์ œ User-service๋Š” config-server์˜ ํ•ด๋‹น token.secret์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๊ฐ€์ ธ์™€์„œ jwt ํ† ํฐ์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๊ณ  api-gateway์„œ๋น„์Šค๋Š” jwt ํ† ํฐ์„ config-server์˜ ํ•ด๋‹น token.secret์ •๋ณด๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ jwt๊ฐ’์ด ์œ ํšจํ•œ์ง€ parsingํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.