์•ˆ๋…•ํ•˜์„ธ์š” Mambo ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์›น์‚ฌ์ดํŠธ ์ ‘์† ์‹œ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” HTTPS ๊ทธ๋ฆฌ๊ณ  SSL ์ธ์ฆ์„œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ คํ•ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ ์šด์˜์ค‘์ธ ์›น ์„œ๋น„์Šค๋ฅผ HTTPS๋กœ ๋ฐฐํฌ๋˜๊ณ ์žˆ์œผ๋‚˜ ์ •์ž‘ SSL์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋จธ๋ฆฌ์†์—์„œ ๋ณต์žกํ•˜๊ฒŒ ์–ฝํ˜€ ์ œ๋Œ€๋กœ ์ •๋ฆฌ๋˜์ง€์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด์„œ ์–ฝํ˜€์žˆ๋Š” ๋ถ€๋ถ„์„ ํ•˜๋‚˜์”ฉ ํ’€์–ด๋‚˜๊ฐ€๋ฉด์„œ SSL์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ™•๋ฆฝํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

HTTPS

์ผ๋ฐ˜ ์‚ฌ๋žŒ๋“ค์ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•ด์„œ ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•  ๋•Œ HTTPS๊ฐ€ ์ ์šฉ๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ HTTPS๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ ์œ„์กฐ ๋˜๋Š” ๋ณ€์กฐ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ํ‘œ์ค€ ๋ณด์•ˆ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

ํฌ๋กฌ๊ณผ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” HTTPS์™€ ๊ฐ™์€ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ์ธ์ง€๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ ์˜†์— ๋Š๋‚Œํ‘œ๋‚˜ ์ž๋ฌผ์‡  ์•„์ด์ฝ˜์„ ๋ณด์‹ ์  ์žˆ์œผ์‹ ๊ฐ€์š”? ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ž๋ฌผ์‡  ์•„์ด์ฝ˜์„ ๊ฐ€์ง„๋‹ค๋ฉด ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTPS๋Š” HTTP๋ผ๋Š” ์ „์†ก ํ”„๋กœํ† ์ฝœ๊ณผ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”๋ณตํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ์•ˆํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ตœ๊ทผ ์ปดํ“จํ„ฐ๋“ค์˜ CPU ์„ฑ๋Šฅ์ด ์ข‹์•„์ง์— ๋”ฐ๋ผ์„œ ์•”๋ณตํ˜ธํ™” ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์ƒ๋‹นํžˆ ๋ฏธ๋ฏธํ•˜๋ฉฐ ๋„คํŠธ์›Œํฌ ๊ธฐ์ˆ ์˜ ๋ฐœ์ „์œผ๋กœ ๋ ˆ์ดํ„ด์‹œ๋„ ์ค„์–ด๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— HTTPS์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ตํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

TLS ํ•ธ๋“œ์‰์ดํฌ

HTTPS๊ฐ€ ์ ์šฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์ธ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Cloudflare - What is a TLS handshake?

TLS ํ•ธ๋“œ์‰์ดํฌ๋Š” ์›น ์š”์ฒญ์— ๋Œ€ํ•œ ์‹ ๋ขฐ์„ฑ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํ†ต์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์•”๋ณตํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์„ ์„œ๋กœ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์œ„ ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด์—์„œ ์„ค๋ช…ํ•˜๋Š” TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ธ์ฆ์„œ(Certificate)๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์„œ๋กœ ์•”ํ˜ธํ™” ๋ฐฉ์‹(CipherSpec)์„ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ค‘ ๋ณด์•ˆ ํƒญ์—์„œ TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์— ์˜ํ•ด ๊ฒฐ์ •๋œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ฌํ•ญ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค์ด๋ฒ„ ์›น ์‚ฌ์ดํŠธ

ํšŒ์‚ฌ ์›น ์‚ฌ์ดํŠธ

๋„ค์ด๋ฒ„ ์›น ์‚ฌ์ดํŠธ๋Š” DigiCert๋ผ๋Š” ์ธ์ฆ๊ธฐ๊ด€์—์„œ ๋ฐœํ–‰ํ•œ SSL ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•˜์˜€๊ณ  TLS 1.3 ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ X25519 ๋ฐฉ์‹์œผ๋กœ ํ‚ค๋ฅผ ๊ตํ™˜ํ•˜๊ณ  AES_256_GCM์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๋ฉฐ ํšŒ์‚ฌ์—์„œ ์šด์˜์ค‘์ธ ์›น ์„œ๋น„์Šค๋Š” ๋„ค์ด๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ TLS 1.2, ECDHE_ECDSA, AES_128_GCM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋“ค๋„ HTTPS๋ฅผ ์ ์šฉํ•œ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์šด์˜์ค‘์ด๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์‚ฌํ•ญ์œผ๋กœ ๊ฒฐ์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ์‚ฌํ•ญ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜๋Š” ์‚ฌํ•ญ๋“ค๊ณผ ํด๋ผ์ด์–ธํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌํ•ญ๋“ค์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .

TLS ๋ฒ„์ „

TLS ๋ฒ„์ „์€ TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐ์Šค๋Ÿฝ๊ฒŒ๋„ ๋ฒ„์ „์ด ๋†’์€ TLS 1.3์ด TLS 1.2๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜๋Š” TLS ๋ฒ„์ „ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ๋ฒ„์ „์œผ๋กœ TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ TLS 1.1๊นŒ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ TLS 1.2 ์ด์ƒ์„ ์š”๊ตฌํ•œ๋‹ค๋ฉด ์ผ์น˜ํ•˜๋Š” TLS ๋ฒ„์ „์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” TLS 1.1์„ ์‚ฌ์šฉํ•˜๊ณ ์žํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฏธ TLS 1.0๊ณผ TLS 1.1 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ตœ์†Œํ•œ TLS 1.2 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์œ„๋Š” ํšŒ์‚ฌ์—์„œ ์šด์˜์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณธ ๊ฒฝ์šฐ๋กœ SSLv3, TLSv1.0, TLS v1.1๋“ฑ์˜ TLS ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๊ฑฐ๋ถ€๋œ ๊ฒƒ์ด ์˜ค๋ฅ˜ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅ๋œ ์ƒํ™ฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” AWS Beanstalk์™€ ํ•จ๊ป˜ NLB(Network Load Balancer)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ NLB๋Š” TCP ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•˜์—ฌ ๋ถ„์‚ฐ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ํ”„๋ก์‹œ๋˜๋„๋ก ๊ตฌ์„ฑํ–ˆ๊ธฐ๋•Œ๋ฌธ์— L4 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ TLS ํ•ธ๋“œ์‰์ดํฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

NLB์—์„œ TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ IT ์ธํ”„๋ผ ์ƒ TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๊ตฌ์„ฑ์€ ์•„๋‹™๋‹ˆ๋‹ค.

HTTP/3 ๊ทธ๋ฆฌ๊ณ  QUIC

ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด์„œ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ถ„๋“ค์€ QUIC ์ด๋ผ๊ณ ํ•˜๋Š” ์ „์†ก ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด์„œ ๋“ค์–ด๋ณด์‹  ์  ์žˆ์œผ์‹ค ๊ฒ๋‹ˆ๋‹ค. TCP๊ฐ€ ์•„๋‹Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์€ UDP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๊ตฌ๊ธ€ ์›น ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์— ์˜ํ•ด ๊ฒฐ์ •๋œ ์‚ฌํ•ญ์„ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด TLS๊ฐ€ ์•„๋‹Œ QUIC์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

QUIC์€ TLS๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด์žˆ์œผ๋ฉฐ TLS๋Š” ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— HTTP๊ฐ€ ์•„๋‹Œ ์ „์†ก ํ”„๋กœํ† ์ฝœ๊ณผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ ์ž…๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ์›น ์‚ฌ์ดํŠธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๋ถ„์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ฑ ์ •์  ์ปจํ…์ธ ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” CDN ์„œ๋ฒ„๋ฅผ ์‚ดํŽด๋ณด๋ฉด h3-29๋ผ๊ณ  ํ•˜๋Š” QUIC์˜ ํ‘œ์ค€ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ฌดํŠผ ๋‹ค์‹œ TLS ๋ฒ„์ „์— ๋Œ€ํ•œ ์‚ฌํ•ญ์„ ๋” ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ตญ๋‚ด ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์ค‘ ํ•˜๋‚˜์ธ OKKY ์‚ฌ์ดํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜๋Š” TLS ๋ฒ„์ „์„ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด Check TLS Version์„ ์ˆ˜ํ–‰ํ•ด๋ณธ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

TLS 1.3์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฆฌํฌํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” TLS 1.2 ์ด์ƒ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ TLS 1.3์„ ์ง€์›ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ TLS 1.2 ์ง€์›ํ•˜์ง€์•Š๋„๋ก ๋ฐœํ‘œํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ TLS 1.3์„ ์ง€์›ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€ํ”ผํ•œ ์ƒํ™ฉ์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , ํšŒ์‚ฌ์—์„œ ์šด์˜์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ธ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ์Šค์œ„ํŠธ

์•”ํ˜ธํ™” ์Šค์œ„ํŠธ(Cipher Suite)๋Š” ํ‚ค ๊ตํ™˜, ์ „์ž ์„œ๋ช…, ์•”ํ˜ธํ™” ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์กฐํ•ฉํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์—์„œ ๊ฒฐ์ •๋œ ์‚ฌํ•ญ ์ค‘ ECDHE_ECDSA ๊ทธ๋ฆฌ๊ณ  AES_128_GCM์ด ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# [ํ”„๋กœํ† ์ฝœ]_[ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜]_[์ „์ž ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜]_WITH_[์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜]_[๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ]
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

์•”ํ˜ธํ™” ์Šค์œ„ํŠธ๋Š” ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋„๋ก ์กฐํ•ฉ๋œ ๋ฌธ์ž์—ด์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์‹œ ๋‚˜์—ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • TLS : ํ”„๋กœํ† ์ฝœ
  • ECDHE : ํƒ€์› ๊ณก์„  ๋””ํ”ผ ํ—ฌ๋งŒ ํ‚ค ๊ตํ™˜
  • ECDSA : ํƒ€์› ๊ณก์„  ๋””์ง€ํ„ธ ์„œ๋ช…
  • AES_128_GCM : 128 ๋น„ํŠธ ๋ธ”๋ก ๊ฐˆ๋ฃจ์™€/์นด์šดํŠธ ๋ชจ๋“œ์˜ AES ์•”ํ˜ธํ™”
  • SHA256 : 256๋น„ํŠธ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ณด์•ˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ECDHE-ECDSA๊ฐ€ ์–ด๋–ค ์›๋ฆฌ๋„ ๋™์ž‘ํ•˜๋Š”์ง€๊นŒ์ง€๋Š” ์•Œ ํ•„์š”๋Š” ์—†์œผ๋ฉฐ ์–ด๋–ป๊ฒŒ ํ‚ค ๊ตํ™˜์„ ํ•˜๊ณ  ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์„œ๋ช…ํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ์•”ํ˜ธํ™”ํ•˜๋Š”์ง€๋งŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๋”๋ผ๋„ ๋ณด์•ˆ ๊ธฐ์ˆ ์„ ์ดํ•ดํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š์œผ์‹ค ๊ฒ๋‹ˆ๋‹ค. (์šฐ๋ฆฌ์˜ ์‹œ๊ฐ„์€ ์†Œ์ค‘ํ•˜๋‹ˆ๊นŒ์š”โ€ฆ)

์ด๋Ÿฌํ•œ ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ๋Š” AWS์˜ ELB(Elastic Load Balancing)์˜ ๋ณด์•ˆ ์ •์ฑ…์—์„œ๋„ ์ •์ฑ…๋ณ„ ์ง€์› ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ELB Security Policy

SSL ์ธ์ฆ์„œ

TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” SSL ์ธ์ฆ์„œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ž์ฒด์ ์œผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ๊ธฐ๊ด€(CA) ์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์šด์˜์ฒด์ œ์— ๋“ฑ๋ก๋œ ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด์„œ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” SSL ์ธ์ฆ์„œ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์—์„œ ์ œ๊ณต๋ฐ›์€ SSL ์ธ์ฆ์„œ๋Š” ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€(CA)์—์„œ ์ธ์ฆํ•˜๋Š” ์ค‘๊ฐ„ ์ธ์ฆ ๊ธฐ๊ด€(ICA) ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ์ด๋ฉฐ ์ด๋ฅผ ์ฒด์ธ ์ธ์ฆ์„œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Sectigo์™€ DigiCert ๊ทธ๋ฆฌ๊ณ  GlobalSign์€ ๋งŽ์ด ์‚ฌ์šฉ๋˜์–ด์ง€๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€์ž…๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” ์Šค์œ„ํŠธ ์ค‘ ECDSA์™€ ๊ฐ™์€ ํƒ€์› ๊ณก์„  ๋””์ง€ํ„ธ ์„œ๋ช…์œผ๋กœ ๋ฐœ๊ธ‰๋œ ์ธ์ฆ์„œ๋ฅผ ECC ์ธ์ฆ์„œ๋ผ๊ณ ํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ด์™”๋˜ RSA ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ์„œ๋ณด๋‹ค ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋น„์Šค์—์„œ ์•”๋ณตํ˜ธํ™”์— ๋Œ€ํ•œ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ์„œ์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ํƒ€์› ๊ณก์„ ํ˜• ์„œ๋ช… ๋ฐฉ์‹์œผ๋กœ ๋ฐœ๊ธ‰ํ•˜๋Š” ECC ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ

์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์ง€ ์•Š๊ณ  ์ง์ ‘ ๋งŒ๋“œ๋Š” ์ธ์ฆ์„œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„๋ฉ”์ธ์„ ๊ตฌ์ž…ํ•˜๊ณ  ์ธ์ฆ ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ์ธ์ฆ์„œ๋ฅผ ๋ฐ›๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋‹น์žฅ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ณด์œ ์ค‘์ธ ๋„๋ฉ”์ธ์ด ์žˆ๋‹ค๋ฉด Letโ€™s Encrypt์„ ํ†ตํ•ด ๋ฌด๋ฃŒ๋กœ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ณด์œ ์ค‘์ธ ๋„๋ฉ”์ธ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— OpenSSL ๋˜๋Š” ์ž๋ฐ”์˜ Keystore ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ์ธ์ฆ ๊ธฐ๊ด€์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•  ๋•Œ ์„œ๋ช…ํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๊ฒƒ์œผ๋กœ ์„œ๋ช…๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ๋ฐœ๊ธ‰๋ฐ›์€ SSL ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐœ๊ธ‰๋˜์—ˆ๋Š”์ง€๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

๋จผ์ €, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด์žฅํ•˜๋Š” CA ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ OpenSSL ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋ฉด PEM ํ˜•์‹์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์ฆ ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์ธ์ฆ์„œ ํ˜•์‹์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋‹ค๋ฅธ ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์œผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐœ๊ธ‰๋œ PEM ํ˜•์‹์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

OpenSSL์œผ๋กœ ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR)์„ ๋จผ์ € ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ๊ธ‰ํ•˜๋Š” RSA ๊ธฐ๋ฐ˜์˜ ๊ฐœ์ธํ‚ค๊ฐ€ ์•„๋‹Œ ECC ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•œ ECDSA ๊ธฐ๋ฐ˜์˜ ๊ฐœ์ธํ‚ค๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

Windows Terminal
# ECDSA ๊ธฐ๋ฐ˜์˜ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ PS openssl ecparam -out ca.key -name prime256v1 -genkey # ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR) ์ƒ์„ฑ PS openssl req -new -sha256 -subj /C=KO/ST=None/L=None/O=None/CN=CA -key ca.key -out ca.csr

์œ„ ๋ช…๋ น์–ด ์˜ˆ์‹œ์—์„œ ๊ฐœ์ธํ‚ค๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ๋œ prime256v1์€ ํƒ€์› ๊ณก์„ ํ˜• ์„œ๋ช… ๋ฐฉ์‹์„ ์ง€์นญํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ๋‚˜์„œ ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉด ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

Windows Terminal
PS openssl x509 -req -sha256 -days 1095 -in ca.csr -signkey ca.key -out ca.crt Signature ok subject=C = KO, ST = None, L = None, O = None, CN = CA Getting Private key

-days ์˜ต์…˜์œผ๋กœ ์ธํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋Š” 3๋…„(1095์ผ)๊นŒ์ง€ ์œ ํšจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ฆ ๊ธฐ๊ด€์˜ ์ธ์ฆ์„œ๋Š” ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ณด๋‹ค ๊ธด ๋งŒ๋ฃŒ์ผ์ž๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธ์ฆ์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€์˜ CA ์ธ์ฆ์„œ๊ฐ€ ์–ธ์ œ ๋งŒ๋ฃŒ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฒด ์„œ๋ช… ์„œ๋ฒ„ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

์ž์ฒด ์„œ๋ช…ํ•œ CA ์ธ์ฆ์„œ๊ฐ€ ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ CA ์ธ์ฆ์„œ๋กœ ์„œ๋ช…ํ•œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. CA ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ ๊ฐœ์ธํ‚ค์™€ ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Windows Terminal
PS openssl ecparam -out server.key -name prime256v1 -genkey PS openssl req -new -sha256 -subj /C=KO/ST=None/L=None/O=None/CN=localhost -key server.key -out server.csr

์ž์ฒด ์„œ๋ช… ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋•Œ๋Š” CA ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ CA ์ธ์ฆ์„œ์— ์˜ํ•ด ์„œ๋ช…๋˜๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ์— ์•ž์„œ ์ฃผ์ฒด ์ด๋ฆ„์ธ localhost ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„ ์ด๋ฆ„์ธ SAN(Subject Alternative Name)์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. SAN์„ ์ ์šฉํ•ด๋ณด๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ์ธ์ฆ์„œ๋กœ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

san.ext
authorityKeyIdentifier=keyid,issuer subjectAltName = @alt_names [alt_names] IP.1 = 127.0.0.1 DNS.1 = localhost DNS.2 = mambo.kr

์ธ์ฆ ๊ธฐ๊ด€์—์„œ ๋ฐœ๊ธ‰ํ•˜๋Š” SSL ์ธ์ฆ์„œ๋Š” ์œ ํšจ ๊ธฐ๊ฐ„์„ 1๋…„์œผ๋กœ ์„ค์ •ํ•˜๋ฏ€๋กœ 398์ผ ๋™์•ˆ ์œ ํšจํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Windows Terminal
# ์„œ๋ฒ„ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ PS openssl x509 -req -sha256 -days 398 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extfile san.ext # ์„œ๋ฒ„ ์ธ์ฆ์„œ ์กฐํšŒ PS openssl x509 -in server.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 66🆎bb:ed:19:f3:c7:37:9d:d6:5d:29:da:03:7d:b9:4f:53:7c:b7 Signature Algorithm: ecdsa-with-SHA256 Issuer: C = KO, ST = None, L = None, O = None, CN = CA Validity Not Before: Aug 27 11:27:54 2021 GMT Not After : Sep 29 11:27:54 2022 GMT Subject: C = KO, ST = None, L = None, O = None, CN = localhost Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:74:06:a3:39:91:2e:4b:cc:45:40:e8:b0:f8:a3: 96:69:91:66:ef:d3:b3:93:8d:e5:09:78:aa:a5:af: 67:9d:47:13:78:54:7e:d9:02:ba:e4:ca:aa:d4:9f: 8b:f3:be:d7:40:1e:f5:c4:8d:7a:23:5b:09:c3:57: 75:38:7e:4d:e6 ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Authority Key Identifier: DirName:/C=KO/ST=None/L=None/O=None/CN=CA serial:5D:98:7B:BF:10:35:6B:9C:11:97:2C:AC:21:E3:28:C2:FF:AF:2D:3D X509v3 Subject Alternative Name: IP Address:127.0.0.1, DNS:localhost, DNS:mambo.kr Signature Algorithm: ecdsa-with-SHA256 30:46:02:21:00:ce:5d:3a:68:e9:04:dc:a9:fd:e6:14:de:bb: 11:5c:5a:a1:bf:b4:f9:1a:61:08:cd:da:47:d1:b4:68:80:81: d1:02:21:00:e7:a1:b4:cb:06:6d:ad:80:d3:89:09:c1:1e:ca: 6e:c7:2e:14:fd:99:d9:df:44:14:cb:47:39:df:ea:5e:e0:1e

์ธ์ฆ์„œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ CA ์ธ์ฆ์„œ๋กœ ์„œ๋ช…๋˜์—ˆ๊ณ  SAN์ด ์„ค์ •๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์œผ๋ฏ€๋กœ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธ์ฆ์„œ

์•ž์„œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์ž์ฒด ์„œ๋ช…๋œ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋น„์Šค๋ฅผ HTTPS๋กœ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ์ง์ ‘ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ Nginx์™€ ๊ฐ™์€ L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์— SSL ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด์„œ SSL ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•ด๋ณด๊ณ  Nginx ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ TLS ํ•ธ๋“œ์‰์ดํ‚น์„ ์ˆ˜ํ–‰ํ•จ์„ ๊ฒ€์ฆํ•ด๋ด…๋‹ˆ๋‹ค.

JKS ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜

์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HTTPS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” KeyStore ํ˜•์‹์˜ SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” OpenSSL์„ ์‚ฌ์šฉํ•ด์„œ PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ KeyStore ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผํ•ฉ๋‹ˆ๋‹ค.

  1. PEM ์ธ์ฆ์„œ๋ฅผ PFX ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜
  2. PFX ์ธ์ฆ์„œ๋ฅผ JKS ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜

PEM ์ธ์ฆ์„œ๋ฅผ PFX ์ธ์ฆ์„œ๋กœ

OpenSSL์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ PKCS12 ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PKCS12 ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ธ์ฆ์šฉ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Windows Terminal
PS openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx Enter Export Password: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] Verifying - Enter Export Password: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd]

PFX ์ธ์ฆ์„œ๋ฅผ JKS ์ธ์ฆ์„œ๋กœ

์ž๋ฐ”์˜ Keytool ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ PKCS12 ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Windows Terminal
PS keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore server.jks -deststoretype pkcs12 ํ‚ค ์ €์žฅ์†Œ server.pfx์„(๋ฅผ) server.jks(์œผ)๋กœ ์ž„ํฌํŠธํ•˜๋Š” ์ค‘... ๋Œ€์ƒ ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋‹ค์‹œ ์ž…๋ ฅ: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] ์†Œ์Šค ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ: [PFX ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] 1 ๋ณ„์นญ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž„ํฌํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž„ํฌํŠธ ๋ช…๋ น ์™„๋ฃŒ: ์„ฑ๊ณต์ ์œผ๋กœ ์ž„ํฌํŠธ๋œ ํ•ญ๋ชฉ์€ 1๊ฐœ, ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œ๋œ ํ•ญ๋ชฉ์€ 0๊ฐœ์ž…๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

KeyStore ํ˜•์‹์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“  ํ›„ HTTPS๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.

application.properties
server.port=8080 server.ssl.enabled=true server.ssl.protocol=TLS server.ssl.enabled-protocols=TLSv1.2,TLSv1.3 server.ssl.key-store=classpath:cert/server.jks server.ssl.key-store-password=passwd server.ssl.key-store-type=pkcs12

์‹คํ–‰๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ž์ฒด ์„œ๋ช…๋œ ์„œ๋ฒ„ ์ธ์ฆ์„œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ๊ธ‰์ž์ธ CA์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์‚ฌ์ดํŠธ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•œ ๋ถ€๋ถ„์œผ๋กœ ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ด€์œผ๋กœ ๋“ฑ๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ค์ • > ๊ฐœ์ธ์ •๋ณด ๋ฐ ๋ณด์•ˆ > ๋ณด์•ˆ > ์ธ์ฆ์„œ ๊ด€๋ฆฌ๋กœ ๋“ค์–ด๊ฐ€์„œ ์ž์ฒด ์„œ๋ช…๋œ CA ์ธ์ฆ์„œ๋ฅผ ๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฃจํŠธ ์ธ์ฆ ๊ธฐ๊ด€ ๋ชฉ๋ก์— ์ž์ฒด ์„œ๋ช… CA ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

127.0.0.1
mambo.kr

๋กœ์ปฌํ˜ธ์ŠคํŠธ ๋Œ€์‹ ์— SAN์œผ๋กœ ์ง€์ •ํ•˜์˜€๋˜ 127.0.0.1๊ณผ mambo.kr์— ๋Œ€ํ•ด์„œ๋„ ์‹ ๋ขฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ๋”ฐ๋ผํ•ด๋ณด๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„๋“ค ์ค‘์—์„œ ์—ฌ์ „ํžˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ œ Nginx์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ Nginx์—์„œ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ–ˆ๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜

์ธ์ฆ ๊ธฐ๊ด€ ๋Œ€ํ–‰ ์—…์ฒด์—์„œ ๋ฐœ๊ธ‰ํ•ด์ค€ ์ธ์ฆ์„œ๊ฐ€ KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ผ๋ฉด PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์šฐ๋ฆฌ๋Š” PEM ํ˜•์‹์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์ด์ง€๋งŒ ์—†๋Š” ์ƒํƒœ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  KeyStore ํ˜•์‹์˜ ์ธ์ฆ์„œ๋ฅผ PEM ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด๋ด…๋‹ˆ๋‹ค.

๋ณ€ํ™˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด KeyStore ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ์˜ ๋ฐ˜๋Œ€ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  1. JKS ์ธ์ฆ์„œ๋ฅผ PFX ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜
  2. PFX ์ธ์ฆ์„œ๋ฅผ PEM ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜
Windows Terminal
# JKS ์ธ์ฆ์„œ๋ฅผ PFX ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ PS keytool -importkeystore -srckeystore server.jks -destkeystore server.pfx -deststoretype pkcs12 ํ‚ค ์ €์žฅ์†Œ server.jks์„(๋ฅผ) server.pfx(์œผ)๋กœ ์ž„ํฌํŠธํ•˜๋Š” ์ค‘... ๋Œ€์ƒ ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋‹ค์‹œ ์ž…๋ ฅ: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] ์†Œ์Šค ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ: [JKS ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] 1 ๋ณ„์นญ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ž„ํฌํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž„ํฌํŠธ ๋ช…๋ น ์™„๋ฃŒ: ์„ฑ๊ณต์ ์œผ๋กœ ์ž„ํฌํŠธ๋œ ํ•ญ๋ชฉ์€ 1๊ฐœ, ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œ๋œ ํ•ญ๋ชฉ์€ 0๊ฐœ์ž…๋‹ˆ๋‹ค. # PFX ์ธ์ฆ์„œ์—์„œ PEM ํ˜•์‹์˜ ์ธ์ฆ์„œ๋กœ ๋ณ€ํ™˜ PS openssl pkcs12 -in server.pfx -out server.crt -clcerts -nokeys Enter Import Password: [PFX ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] # PFX ์ธ์ฆ์„œ์—์„œ ๊ฐœ์ธํ‚ค ์ถ”์ถœ PS openssl pkcs12 -in server.pfx -out server.key -nocerts Enter Import Password: [PFX ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] Enter PEM pass phrase: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd] Verifying - Enter PEM pass phrase: [๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ:passwd]

PFX ์ธ์ฆ์„œ๋ฅผ PEM ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ๋‚˜์„œ๋Š” ๋ถ€๊ฐ€์ ์ธ ํ—ค๋”๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ์œผ๋ฏ€๋กœ PEM ํ˜•์‹์— ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋งŒ ๋ณ„๋„๋กœ ๋‹ค์‹œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ์ธํ‚ค์˜ ๊ฒฝ์šฐ -----BEGIN PRIVATE KEY-----์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ -----END PRIVATE KEY-----์œผ๋กœ ๋๋‚˜๋Š” ๋ถ€๋ถ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

Nginx

Nginx์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์€ ๋„์ปค ์ปดํฌ์ฆˆ๋กœ ์‹คํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ์•ž์„  ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰๊ฐ€๋Šฅํ•œ JAR ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•˜์—ฌ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

Windows Terminal
gradle bootJar > Task :compileJava UP-TO-DATE > Task :processResources UP-TO-DATE > Task :classes UP-TO-DATE > Task :bootJarMainClassName > Task :bootJar # build/libs/demo-0.0.1-SNAPSHOT.jar

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์˜ ๋„์ปค ์ปดํฌ์ฆˆ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํŒจํ‚ค์ง•๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋ฒ„ ์ธ์ฆ์„œ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธํ‚ค ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

docker-compose.yaml
version: '3.8' services: nginx: image: nginx ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./server.crt:/etc/nginx/server.crt - ./server.key:/etc/nginx/server.key app: image: adoptopenjdk/openjdk11 command: 'java -jar /etc/app.jar' volumes: - ./demo-0.0.1-SNAPSHOT.jar:/etc/app.jar

๋„์ปค ์ปดํฌ์ฆˆ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” Nginx ์„ค์ • ํŒŒ์ผ์— 443 ํฌํŠธ์— SSL์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  SSL ์ธ์ฆ์„œ๋ฅผ ์ง€์ •ํ•˜๋„๋ก ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

nginx.conf
worker_processes auto; events { worker_connections 1024; } http { access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; include /etc/nginx/mime.types; server { listen 443 ssl; server_name localhost 127.0.0.1 mambo.kr; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://app:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } keepalive_timeout 60; include /etc/nginx/conf.d/*.conf; }

๋„์ปค ์ปดํฌ์ฆˆ ๋ช…๋ น์–ด๋กœ Nginx์™€ ํ•จ๊ป˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.

Windows Terminal
docker-compose up -d

์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด Nginx์˜ 443 ํฌํŠธ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ฒ˜๋Ÿผ TLS ํ•ธ๋“œ์‰์ดํฌ ๊ณผ์ •์ด Nginx์— ์˜ํ•ด ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ƒ์œผ๋กœ SSL ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ์ •๋ฆฌ๋ฅผ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ธํ”„๋ผ ๊ตฌ์กฐ์ƒ SSL ์ธ์ฆ์„œ๋ฅผ ์–ด๋””์— ๋“ฑ๋กํ•˜๊ณ  TLS ํ•ธ๋“œ์‰์ดํ‚น ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€๋„ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜์ค‘์ธ ์›น ์„œ๋น„์Šค๋ฅผ ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” Nginx ๋˜๋Š” NLB์—์„œ TLS ํ•ธ๋“œ์‰์ดํ‚น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก SSL ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊นŒ์ง€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ TLS ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๋Š” ๊ฒƒ์€ ๊ฐ์•ˆํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ