SSL Handshake

๊ฐฑ๋‘ยท2021๋…„ 10์›” 16์ผ
0

๐Ÿ“š ๋„คํŠธ์›Œํฌ

๋ชฉ๋ก ๋ณด๊ธฐ
5/15

๐Ÿ”’ HTTPS๋Š” ์ œ 3์ž ์ธ์ฆ, ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™”, ๋น„๋ฐ€ํ‚ค ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•จ
1. ์ œ3์ž ์ธ์ฆ : ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ๊ธฐ๊ด€์— ๋“ฑ๋ก๋œ ์ธ์ฆ์„œ๋งŒ ์‹ ๋ขฐ
2. ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” : ๋น„๋ฐ€ํ‚ค๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
3. ๋น„๋ฐ€ํ‚ค ์•”ํ˜ธํ™” : ํ†ต์‹ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

SSL ์ธ์ฆ์„œ์™€ SSL Handshake์— ํƒ‘์žฌ๋œ ๊ธฐ์ˆ 

  • ํ•˜๋‚˜์˜ ํ‚ค๋กœ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹
  • ํ•œ ์Œ์˜ ํ‚ค ํŽ˜์–ด๋กœ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹
  • ํ†ต์‹  ๋Œ€์ƒ์„ ์„œ๋กœ๊ฐ€ ํ™•์ธํ•˜๋Š” ์‹ ๋ถ„ ํ™•์ธ
  • ๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์œ„ํ•œ ๋””์ง€ํ„ธ ์„œ๋ช…
  • ๋””์ง€ํ„ธ ์„œ๋ช…์„ ํ•ด์ฃผ๋Š” ์ธ์ฆ ๊ธฐ๊ด€ (CA)
  • ๊ณต๊ฐœํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
  • ์•”ํ˜ธํ™”๋œ ๋ฉ”์„ธ์ง€์˜ ๋ณ€์กฐ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„ธ์ง€ ๋ฌด๊ฒฐ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜

SSL Handshake ๊ณผ์ •

ํด๋ผ์ด์–ธํŠธ 1)
Client Hello : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋จผ์ € ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ๋ง์„ ๊ฑด๋‹ค.
๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์—์„œ naver.com์„ ์น˜๋ฉด ๋‚ด ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„ค์ด๋ฒ„ ์›น ์„œ๋ฒ„์— ์ ‘์†์„ ์‹œ๋„ํ•จ. TCP์—ฐ๊ฒฐ์„ ์œ„ํ•œ 3-way handshake๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„ค์ด๋ฒ„๊ฐ€ HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๊ณ  ๋‹ค์Œ์˜ ์ •๋ณด๋ฅผ ๋ณด๋ƒ„

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

์„œ๋ฒ„ 2)
Server Hello : ์„œ๋ฒ„ ๋˜ํ•œ ์œ„์˜ ์ธ์‚ฌ์— ์‘๋‹ตํ•˜๋ฉด์„œ, ๋‹ค์Œ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•จ.

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์•”ํ˜ธํ™” ๋ฐฉ์‹ ์ •๋ณด ์ค‘์—์„œ, ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜๊ณ  ์„ ํƒํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹
  • ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๊ฐ€ ๋‹ด๊ธด SSL ์ธ์ฆ์„œ
  • ์„œ๋ฒ„๊ฐ€ ์ˆœ๊ฐ„์ ์œผ๋กœ ์ƒ์„ฑํ•œ ์ž„์˜์˜ ๋‚œ์ˆ˜
  • ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ ์š”์ฒญ (์„ ํƒ ์‚ฌํ•ญ)

ํด๋ผ์ด์–ธํŠธ 3)
๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์˜ SSL ์ธ์ฆ์„œ๊ฐ€ ๋ฏฟ์„๋งŒํ•œ์ง€ ํ™•์ธํ•จ
๋“ฑ๋ก๋œ CA๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜, ๋“ฑ๋ก๋œ CA๊ฐ€ ๋งŒ๋“  ์ธ์ฆ์„œ์ฒ˜๋Ÿผ ๊พธ๋ช„๋‹ค๋ฉด ๊ฒฝ๊ณ 

ํด๋ผ์ด์–ธํŠธ 4)
๋ธŒ๋ผ์šฐ์ €๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๋‚œ์ˆ˜์™€ ์„œ๋ฒ„์˜ ๋‚œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ premaster secret์„ ๋งŒ๋“ฌ
์›น ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ๋”ธ๋ ค์˜จ ์›น ์‚ฌ์ดํŠธ์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†กํ•จ

์„œ๋ฒ„ 5)
์„œ๋ฒ„๋Š” ์‚ฌ์ดํŠธ์˜ ๋น„๋ฐ€ํ‚ค๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณด๋‚ธ premaster secret๊ฐ’์„ ๋ณตํ˜ธํ™”
๋ณตํ˜ธํ™”ํ•œ ๊ฐ’์„ master secret ๊ฐ’์œผ๋กœ ์ €์žฅํ•จ. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐฉ๊ธˆ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์—ฐ๊ฒฐ์— ๊ณ ์œ ํ•œ ๊ฐ’์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ session key๋ฅผ ์ƒ์„ฑํ•จ. ์„ธ์…˜ ํ‚ค๋Š” ๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”์— ์‚ฌ์šฉํ•˜๊ณ  ์ด๊ฑธ ์‚ฌ์šฉํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณตํ˜ธํ™”ํ•จ

์„œ๋ฒ„&ํด๋ผ์ด์–ธํŠธ 6)
SSL handshake๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  HTTPS ํ†ต์‹ ์„ ์‹œ์ž‘ํ•จ
๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๋Š” SSL Handshake๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๊ณ  ์ด์ œ ์›น ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ์…˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”ํ•˜๋ฉฐ HTTPS ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ“ ์š”์•ฝ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP 3-way handshake๋ฅผ ์ˆ˜ํ–‰ํ•œ ์ดํ›„ Client Hello๋ฅผ ์ „์†กํ•จ. ์„œ๋ฒ„๋Š” ์ธ์ฆ์„œ๋ฅผ ๋ณด๋‚ด๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ๋ก๋œ ์ธ์ฆ๊ธฐ๊ด€์ธ์ง€๋ฅผ ํ™•์ธํ•จ.
์ด ์ธ์ฆ์„œ๋Š” ์ธ์ฆ๊ธฐ๊ด€์˜ ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™”๋˜์–ด์žˆ๊ณ , ๊ณต๊ฐœํ‚ค๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Œ(๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ) ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์ดํŠธ์˜ ์ •๋ณด์™€ ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ.

์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ๋น„๋ฐ€ํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ ์„œ๋ฒ„์— ๋ณด๋ƒ„. ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๊ฐœ์ธํ‚ค๋กœ ํ™•์ธํ•˜๊ณ  ์ดํ›„ ํ†ต์‹ ์€ ๊ณต์œ ๋œ ๋น”๋ฆฌํ‚ค๋กœ ์•”ํ˜ธํ™”๋˜์–ด ํ†ต์‹ ํ•จ.

์ œ3์ž ์ธ์ฆ : ์ธ์ฆ์„œ, ์ธ์ฆ ๊ธฐ๊ด€/๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” : ์ธ์ฆ์„œ, ๋น„๋ฐ€ํ‚ค ๊ณต์œ /๋น„๋ฐ€ํ‚ค ์•”ํ˜ธํ™” : ํ†ต์‹  ๊ณผ์ •

๊ณต๊ฐœํ‚ค์™€ ๋น„๋ฐ€ํ‚ค๋ฅผ ๋ณตํ•ฉํ•ด์„œ ์“ฐ๋Š” ์ด์œ 

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

์ถœ์ฒ˜ : https://brunch.co.kr/@sangjinkang/38
https://github.com/ksundong/backend-interview-question

profile
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€