SSL Handshake(TLS Handshake)
SSL handshake๋ HTTP์ ์ ์ํ๋ ๊ณผ์ ์ผ๋ก 3 way handshake ๊ฐ ๋๋ ๋ค์ ์ด๋ฃจ์ด์ง๋ ๊ณผ์ ์ด๋ค.
ํต์ ๊ณผ์ ์์ ์ก์ ์์ ์์ ์๊ฐ ์ํธํ ํต์ ์ ์ํ ๋ฐฉ๋ฒ๊ณผ ์๋จ์ ๋ํด ๊ณต์ ํ๋ค.
์ฆ, ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํ Client์ Server์ ํ์ ๊ณผ์ .
ํ์ ๊ณผ์ ์์๋ SSL ์ธ์ฆ์ ์ ๋ฌ, ๋์นญํค(๋น๋ฐํค) ์ ๋ฌ, ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ฒฐ์ , SSL/TLS ํ๋กํ ์ฝ ๊ฒฐ์ ๋ฑ์ด ํฌํจ.
(1) Client Hello (ํด๋ผ์ด์ธํธ -> ์๋ฒ)
: ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋์ด ๋ฐ ์ ๋ฌ
ํด๋ผ์ด์ธํธ๋ ํต์ ํ๊ณ ์ ํ๋ TLS ๋ฒ์ , ์์ ์ด ์ง์ํ๋ cipher ๋ฆฌ์คํธ, ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ ๋์ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
Cipher Suite์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ฒ ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ Cipher Suite์ Server์๊ฒ ์ ๊ณตํ๋ ๋ชฉ๋ก์ ํ์ธ ๊ฐ๋ฅ
(2) Server Hello (์๋ฒ -> ํด๋ผ์ด์ธํธ)
: ์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ ํ
์๋ฒ๋ ์์ ์ SSL๋ฒ์ , ์์ ์ด ๋ง๋ ์์์ ๋์์ ํด๋ผ์ด์ธํธ์ Cipher ๋ฆฌ์คํธ(Cipher Suite) ์ค ํ๋์ ์ ํํ์ฌ ๊ทธ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
(3) Certificate(์๋ฒ -> ํด๋ผ์ด์ธํธ)
: ์ธ์ฆ์ ์ ๋ฌ
์๋ฒ๋ ์์ ์ด ๊ฐ๊ณ ์๋ ์ธ์ฆ์ ์ ๋ณด(SSL์ธ์ฆ์)๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก
์ธ์ฆ์ ๋ด๋ถ์๋ ์๋ฒ๊ฐ ๋ฐํํ ๊ณต๊ฐํค๊ฐ ๋ค์ด์๋ค.
๊ณต๊ฐํค๋ก ๋ณตํธํ์ ์ฑ๊ณตํ๋ฉด ์ธ์ฆ์๊ฐ ์ง์ง์์ด ์ฆ๋ช ๋จ! ์ฆ, ์ธ์ฆ์ ๊ฒ์ฆ ๋จ๊ณ
(4) Server key Exchange, Server Hello Done (์๋ฒ -> ํด๋ผ์ด์ธํธ)
Server key Exchange : ์๋ฒ์ ๊ณต๊ฐํค๊ฐ SSL์ธ์ฆ์ ๋ด๋ถ์ ์๋ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ ์ง์ ์ ๋ฌํ๋ค๋ ๋ด์ฉ.
์๋์ ๊ฒฝ์ฐ Diffie-Hellman ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํค ๊ตํ ์ฌ๋ฃ๋ฅผ ์๋ก ๊ตํํ๋ฏ๋ก Server key Exchange ๋ฐ์ํจ
ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ ์ํธํ์ ์ฌ์ฉํ ๋์นญํค(๋น๋ฐํค)๋ฅผ ์์ฑํ ํ SSL ์ธ์ฆ์ ๋ด๋ถ์ ๋ค์ด ์๋ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ์ํธํํ์ฌ ์๋ฒ์๊ฒ ์ ์กํด์ผ ํ๋ค.
์ด๋, SSL ์ธ์ฆ์๊ฐ ํด์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก SHA512๋ก ์๋ช ๋์์์ ํ์ธ ๊ฐ๋ฅ
(5) Client Key Exchange, Change Cipher Spec
: ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ๋์นญํค ์ ๋ฌ, SSL Handshake ์ข ๋ฃ
Client Key Exchange(ํด๋ผ์ด์ธํธ -> ์๋ฒ)
๋์นญํค(๋น๋ฐํค, ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ํธํํ๋ ํค)๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ์ฌ
SSL์ธ์ฆ์ ๋ด๋ถ์์ ์ถ์ถํ Server์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ์ํธํ ํ ์๋ฒ์๊ฒ ์ ๋ฌ.
์ฌ๊ธฐ์ ์ ๋ฌ๋ '๋์นญํค'๊ฐ ๋ฐ๋ก SSL Handshake์ ๋ชฉ์ ์ด์ ๊ฐ์ฅ ์ค์ํ ์๋จ์ธ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ํธํํ ๋์นญํค(๋น๋ฐํค)์ด๋ค.
Change Cipher Spec(ํด๋ผ์ด์ธํธ -> ์๋ฒ, ์๋ฒ -> ํด๋ผ์ด์ธํธ) / finished
ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋๊ฐ ์๋ก์๊ฒ ๋ณด๋ด๋ Packet์ผ๋ก ๊ตํํ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ตํํ ๋ค ํต์ ํ ์ค๋น๊ฐ ๋ค ๋์์์ ์๋ฆฌ๋ ํจํท.