3 minute read

๋“ค์–ด๊ฐ€๋ฉฐ

Kafka ํด๋Ÿฌ์Šคํ„ฐ์— SSL ์ธ์ฆ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฑธ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Kafka ๋ฌธ์„œ์™€ ์ž๋ฃŒ๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ณ  ์žˆ๋Š”๋ฐ, keytool์ด๋ž€๊ฑธ ์‚ฌ์šฉํ•ด์„œ SSL ์ธ์ฆ์„œ๋ฅผ ๊ตฌ์ถ•ํ•˜๋”๋ผ๊ตฌ์š”! ๊ทธ๋ž˜์„œ SSL/TLS์— ๋Œ€ํ•œ ์ด๋ก ์„ ๋‹ค์‹œ ๋ณด๊ณ , openssl ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•๊นŒ์ง€ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ณ  ์ตํžˆ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.โ€™

์ด์ œ ๋“œ๋””์–ด Java์˜ keytool์— ๋Œ€ํ•ด์„œ ์ •.๋ณต. ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค! ใ…Žใ…Ž ์•„์ขŒ์žฃ!

keytool์ด๋ž€?

Java์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธ์ฆ์„œ ๋ฐ ํ‚ค ๊ด€๋ฆฌ ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค. JDK ๊ฐœ๋ฐœ ๋„๊ตฌ์— ํ•จ๊ป˜ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

openssl์—์„œ๋Š” ํ‚ค๋ฅผ .pem, .key, .crt์™€ ๊ฐ™์ด ํŒŒ์ผ ์ค‘์‹ฌ์œผ๋กœ ๊ด€๋ฆฌ ํ–ˆ์Šต๋‹ˆ๋‹ค. Java keytool์€ ํ‚ค๋ฅผ โ€œ์ €์žฅ์†Œโ€์— ๋ณด๊ด€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ์ €์žฅ์†Œ ์‹œ์Šคํ…œ์€ ํฌ๊ฒŒ โ€œKeystoreโ€์™€ โ€œTruststoreโ€ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‘˜์— ๋Œ€ํ•ด์„œ๋Š” keytool ์‚ฌ์šฉ๋ฒ•์„ ๋จผ์ € ์‚ดํŽด๋ณด๋ฉด์„œ ๋’ค์—์„œ ๊ฐ™์ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์‹œ ๊ฐ•์กฐํ•˜์ž๋ฉด, keytool์€ openssl๊ณผ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค. openssl ์—†์ด keytool๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์•„์ฃผ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธํ‚ค์™€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ keystore์— ์ €์žฅ

๋จผ์ € ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
  -subj "/CN=localhost"
openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 365

.key์™€ .crt ํŒŒ์ผ์„ .p12๋กœ ๋ฌถ์–ด์ค๋‹ˆ๋‹ค.

$ openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12 -name myalias

Enter Export Password:
Verifying - Enter Export Password:

๋งˆ์ง€๋ง‰์œผ๋กœ .p12๋ฅผ keytool์„ ์‚ฌ์šฉํ•ด keystore์— import ํ•ฉ๋‹ˆ๋‹ค.

$ keytool -importkeystore -destkeystore keystore.jks -srckeystore server.p12 \
-srcstoretype PKCS12 -alias myalias

Importing keystore server.p12 to keystore.jks...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:

์™œ ๊ฐœ์ธํ‚ค์™€ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๊ฐ™์ด ์ €์žฅํ•˜๋Š” ๊ฑธ๊นŒ?

๊ทธ๋Ÿฌ๊ฒŒ์š”, ๊ฐœ์ธํ‚ค๋งŒ ๋”ฐ๋กœ ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ท€์ฐฎ๊ฒŒ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๊นŒ์ง€ ๋งŒ๋“œ๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?

์ด์œ ๋Š” ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๊ฐ€ ๊ณง ๊ฐœ์ธํ‚ค์— ๋Œ€์‘ํ•˜๋Š” ๊ณต๊ฐœํ‚ค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Java์˜ Keystore ์ €์žฅ์†Œ๋Š” ์ด ์Œ์„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธํ‚ค๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ฆ๋ช…์„ ๋ชป ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๊ฐ€ ํ•จ๊ป˜ ์žˆ์–ด์•ผ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์ž์‹ ์„ ๋ถ€๊ฐ€ ์ •๋ณด์™€ ํ•จ๊ป˜ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„์ง CA ์„œ๋ช…๋œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์ง€ ์•Š์€ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ๋ฃจํŠธ CA๊ฐ€ ์ˆ˜๋ฆฝ๋˜์—ˆ๋‹ค๋ฉด, ๋ฃจํŠธ CA์—๊ฒŒ ์ธ์ฆ์„œ ์„œ๋ช…์„ ๋‹ค์‹œ ๋ฐ›๊ณ , ๊ธฐ์กด Keystore์— ์ €์žฅ๋œ ์˜ˆ์ „ ์ธ์ฆ์„œ๋Š” ๋ฃจํŠธ CA์—๊ฒŒ ์„œ๋ช… ๋ฐ›์€ ์ธ์ฆ์„œ๋กœ ๊ต์ฒด ํ•ฉ๋‹ˆ๋‹ค.

truststore์— ์‹ ๋ขฐํ•  ๋ฃจํŠธ CA๋ฅผ ๋“ฑ๋ก

TODO?

Categories: ,

Updated: