
์ง๋๋ฒ ์์ฑํ HTTP ๊ธ์ ํตํด HTTP์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ์ ์ด ์์๋ค. ์ด๋ฒ์๋ ์ข ๋ ์์ธํ๊ฒ ๊ณต๋ถํ๊ณ , ๋ณด์์ด ๊ฐํ๋ HTTPS์ ๋ํด์๋ ์์๋ณด๊ณ ์ ํ๋ค.
1. Request / Response (์์ฒญ / ์๋ต)
HTTP ํต์ ์ ํต์ฌ์ ์์ฒญ(request)๊ณผ ์๋ต(response)์ด๋ค.
๋ธ๋ผ์ฐ์ ์ URL์ ์ ๋ ฅํ๋ฉด HTTP ํ์ค์ ๋ฐ๋ผ URL์ ์์ฒญ ๋ฉ์์ง๋ก ๋ณํํ๊ณ TCP/IP๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ท์ ํตํด ์์ฒญ(request)์ ๋ณด๋ธ๋ค. ์น ์๋ฒ๋ ์์ฒญ์ ์์ ํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์น ํ์ด์ง๋ฅผ ๋ฐํ(response)ํ๋ค.
2. Stateless
๊ฐ๊ฐ์ HTTP ํต์ (์์ฒญ/์๋ต)์ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ณผ๊ฑฐ์ ํต์ (์์ฒญ/์๋ต)์ ๋ํ ๋ด์ฉ์ ์ ํ ์์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ ๋งค ํต์ ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด์์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
๋ง์ผ ์ฌ๋ฌ๋ฒ์ ํต์ (์์ฒญ/์๋ต)์ ์งํ๊ณผ์ ์์ ์ฐ์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ(ex. ์จ๋ผ์ธ ์ผํ๋ชฐ์์ ๋ก๊ทธ์ธ ํ ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ)๋ฅผ ์ํด ๋ก๊ทธ์ธ ํ ํฐ ๋๋ ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค, ์ธ์ , ๋ก์ปฌ์คํ ๋ฆฌ์ง ๊ฐ์ ๊ธฐ์ ์ด ํ์ํ์๋ค.
1. Start line
: HTTP Method, ํ๊ฒ url, HTTP version
2. Headers
Headers: {
Host: ์์ฒญ์ ๋ณด๋ด๋ ๋ชฉํ(ํ๊ฒ)์ ์ฃผ์. ์ฆ, ์์ฒญ์ ๋ณด๋ด๋ ์น์ฌ์ดํธ์ ๊ธฐ๋ณธ ์ฃผ์๊ฐ ๋๋ค
(ex. www.google.com)
User-Agent: ์์ฒญ์ ๋ณด๋ด๋ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด (ex. chrome, firefox, safari, explorer)
Content-Type: ํด๋น ์์ฒญ์ด ๋ณด๋ด๋ ๋ฉ์ธ์ง body์ ํ์
(ex. application/json)
Content-Length: body ๋ด์ฉ์ ๊ธธ์ด
Authorization: ํ์์ ์ธ์ฆ/์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ก๊ทธ์ธ ํ ํฐ์ Authroization ์ ๋ด๋๋ค
}
3. Body
: ํด๋น ์์ฒญ์ ์ค์ ๋ด์ฉ์ด ๋ด๊ธด๋ค. ์ฃผ๋ก POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ body์ ๋ด์ฉ์ด ๋ด๊ธด๋ค.
Body: {
"name": "Chankyu"
"email": "chankyu@gmail.com"
}

1. Status line
: ์๋ต์ ์ํ ์ค์ด๋ค. ์๋ต์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ์ํ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ ค์ฃผ๋ฉด์ ๋ด์ฉ์ ์์ํ๋ค. ์๋ต์ Status Line ๋ ์ธ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- HTTP Version: ์์ฒญ์ HTTP๋ฒ์ ๊ณผ ๋์ผ
- Status Code: ์๋ต ๋ฉ์ธ์ง์ ์ํ ์ฝ๋
- Status Text: ์๋ต ๋ฉ์ธ์ง์ ์ํ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ฃผ๋ ํ ์คํธ
2. Headers
: ์์ฒญ์ ํค๋์ ๋์ผํ๋ค. ์๋ต์ ์ถ๊ฐ ์ ๋ณด(๋ฉํ ๋ฐ์ดํฐ)๋ฅผ ๋ด๊ณ ์๋ ๋ถ๋ถ์ด๋ค. ๋ค๋ง, ์๋ต์์๋ง ์ฌ์ฉ๋๋ ํค๋์ ์ ๋ณด๋ค์ด ์๋ค. (ex. ์์ฒญํ๋ ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๊ฐ ๋ด๊ธด User-Agent ๋์ , Server ํค๋๊ฐ ์ฌ์ฉ๋๋ค.)
3. Body
: ์์ฒญ์ Body์ ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ๋ค. ์์ฒญ์ ๋ฉ์๋์ ๋ฐ๋ผ Body๊ฐ ํญ์ ์กด์ฌํ์ง ์๋ฏ์ด. ์๋ต๋ ์๋ต์ ํํ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ Body๊ฐ ์์ ์๋ ์๋ค. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Body ์ ๋ฐ์ดํฐ ํ์
์ JSON(JavaScript Object Notation) ์ด๋ค.

๐ HTTP๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ ํ๋กํ ์ฝ๋ก TCP/IP ์์์ ์๋ํ๋ค.
๐ HTTP๋ ์ํธํ๊ฐ ๋์ง ์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ํ๋กํ ์ฝ์ด์๊ธฐ ๋๋ฌธ์, ๋๊ตฐ๊ฐ ๋คํธ์ํฌ์์ ์ ํธ๋ฅผ ๊ฐ๋ก์ฑ๋ฉด ๋ด์ฉ์ด ๋ ธ์ถ๋๋ ๋ณด์ ์ด์๊ฐ ์กด์ฌํ๋ค.
๐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HTTPS๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค.
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure ๋ฑ์ผ๋ก ๋ถ๋ฆฌ๋ HTTPS๋ HTTP์ ๋ฐ์ดํฐ ์ํธํ๊ฐ ์ถ๊ฐ๋ ํ๋กํ ์ฝ์ด๋ค.
HTTPS๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ๋ชจ๋ ํต์ ๋ด์ฉ์ด ์ํธํ๋๋ค.
HTTPS ํ๋กํ ์ฝ์ SSL์ด๋ TLS ํ๋กํ ์ฝ์ ํตํด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ค. SSL์ ์๋ฒ์ ๋ธ๋ผ์ฐ์ ์ฌ์ด์ ์์ ํ๊ฒ ์ํธํ๋ ์ฐ๊ฒฐ์ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๊ณ ์๋ฒ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ด๊ฒ์ด ๋๋๋นํ๋ ๊ฒ์ ๋ง์์ค๋ค.
HTTPS๋ 443๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋คํธ์ํฌ ์์์ ์ค๊ฐ์ ์ 3์๊ฐ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋๋ก ๊ณต๊ฐํค ์ํธํ๋ฅผ ์ง์ํ๊ณ ์๋ค.
โ ์ฅ์
โ ๋จ์

๐ ์ด๋ฌํ SSL ๋ฐฉ์์ ์ ์ฉํ๋ ค๋ฉด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์๋ฒ์ ์ ์ฉ์์ผ์ผ ํ๋ค. ์ธ์ฆ์๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ์๋ฒ๊ฐ ์ฐ๋ฆฌ๊ฐ ์๋ํ ์๋ฒ๊ฐ ๋ง๋์ง๋ฅผ ๋ณด์ฅํ๋ ์ญํ ์ ํ๋ค. ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๊ธฐ๊ด์ CA(Certificate Authority)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ณต์ธ์ธ์ฆ๊ธฐ๊ด์ ๊ฒฝ์ฐ ์น ๋ธ๋ผ์ฐ์ ๋ ๋ฏธ๋ฆฌ CA ๋ฆฌ์คํธ์ ํจ๊ป ๊ฐ CA์ ๊ณต๊ฐํค๋ฅผ ์๊ณ ์๋ค.
1. ์๋ฒ - ์ธ์ฆ ์๋ช ์์ฒญ์(CSR) ์์ฑ
2. CA - SSL ์ธ์ฆ์ ๋ฐ๊ธ
3. ์๋ฒ - SSL ์ธ์ฆ์ ์๋ น

4. ํด๋ผ์ด์ธํธ - SSL Handshake์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ : Client Hello
Client๊ฐ ์์ฒญ์ ํ๊ฒ ๋๋ฉด, ๊ฐ์ฅ ๋จผ์ Server์ 3-Way Handshake๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์๋ํ๋ค.(TCP ์ฐ๊ฒฐ์ ์ํ ์๋)
3-Way Handshake๋ฅผ ์ฐ๊ฒฐ์ด ์๋ฃ๋๋ฉด, ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ Client Hello ๋จ๊ณ๋ฅผ ์ํ
HTTPS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์๊ฒ ๋ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ Client Hello ๋จ๊ณ์์ ๋ฐ์ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
5. ์๋ฒ - SSL HandShake์ ๋ ๋ฒ์งธ ๋จ๊ณ : Server Hello
Client๊ฐ ๋ณด๋ด์จ Client Hello ํจํท์ ๋ฐ์, ๋ฐ์ ์ ๋ณด๋ฅผ Client์๊ฒ ์๋ตํ๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ์ํธํ ๋ฐฉ์(Cipher Suite) ์ค์์ ํ๋๋ฅผ ์ ํํด์ Client๋ก ์ ๋ฌ
Server๊ฐ ์์ ์ SSL ์ธ์ฆ์๋ฅผ Client๋ก ์ ๋ฌํ๋ค.
6. ํด๋ผ์ด์ธํธ - SSL HandShake์ ์ธ ๋ฒ์งธ ๋จ๊ณ : Premaster Secret ์์ฑ
๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ SSL ์ธ์ฆ์๊ฐ ๋ฏฟ์๋งํ์ง ํ์ธ.
Client(๋ธ๋ผ์ฐ์ )๊ฐ SSL ์ธ์ฆ์(CA์_Private_key๋ก ์ํธํ(ํด์ฑ๋ Server์ ๋ํ ์ ๋ณด))๋ฅผ CA์ Public Key๋ก ๋์ฝ๋ฉํด๋ณธ๋ค. ๊ทธ๋ฌ๋ฉด Hash(Server์ ๋ํ ์ ๋ณด)์ ๊ฐ์ ์ป์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Server์ ๋ํ ์ ๋ณด๋ฅผ Hashํ ํด์ ์๋ก ์ผ์นํ๋ ์ง ์ฒดํฌํ๋ค. ์ด๋ฅผ ํตํด SSL ์ธ์ฆ์๊ฐ ์์กฐ ๋๋ ์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ์ ์๋ค.
๐ ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ CA์ Public Key๊ฐ ์ ์ฅ๋์ด ์์.
๋ธ๋ผ์ฐ์ ๋ ์์ ์ด ์์ฑํ ๋์์ ์๋ฒ์ ๋์๋ฅผ ์ฌ์ฉํ์ฌ premaster secret์ ๋ง๋ค์ด์ Server๋ก ์ ์กํ๋ค.
Client(๋ธ๋ผ์ฐ์ )์์, ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋๋ค๊ฐ๊ณผ Client(๋ธ๋ผ์ฐ์ )์์ ์์ฑํ ๋๋ค๊ฐ์ Server์ Public Key๋ก ์ํธํํ๋ค. ์ด ์ํธํํ ๊ฐ์ premaster secret์ด๋ผ๊ณ ํ๋ฉฐ, ์ด ๊ฐ์ Server๋ก ์ ๋ฌํ๋ค.
7. ์๋ฒ/ํด๋ผ์ด์ธํธ - SSL HandShake ์ข ๋ฃ & HTTPS ํต์ ์์
๋ธ๋ผ์ฐ์ (Client)์ ์๋ฒ(Server)๋ SSL handshake๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์๊ณ , ์ด์ ๋ ์น์์์ ๋ฐ์ดํฐ๋ฅผ ์ธ์ ํค(session key)๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ/๋ณตํธํํ๋ฉฐ HTTPS ํ๋กํ ์ฝ์ ํตํด ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค. - HTTPS ํต์ ์ด ์๋ฃ๋๋ ์์ ์์ ์๋ก์๊ฒ ๊ณต์ ๋ ์ธ์ ํค(session key)๋ฅผ ํ๊ธฐํ๋ค. ๋ง์ฝ ์ธ์ (session)์ด ์ฌ์ ํ ์ ์ง๋๊ณ ์๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ SSL handshake ์์ฒญ์ด ์๋ ์ธ์ ID๋ง ์๋ฒ์๊ฒ ์๋ ค์ฃผ๋ฉด ๋๋ค.
Client Hello ๊ณผ์ ์์ ๋ณด๋ฉด ์ด์ ์ SSL Handshake๊ฐ ์๋ฃ๋์์ ๋, ์ธ์ ์์ด๋๋ฅผ Serverํํ ๋ณด๋ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
SSL ์ธ์ฆ์ ๊ณผ์ ์๋ ๋์นญํค ๋ฐฉ์๊ณผ ๊ณต๊ฐํค ๋ฐฉ์ ๋ ๊ฐ ๋ชจ๋ ์ฌ์ฉ๋์๋ค. SSL Handshake ๋จ๊ณ๊น์ง๋ ๊ณต๊ฐํค ๋ฐฉ์, ๊ทธ ์ดํ์ HTTPS ํต์ ์ ๋์นญํค ๋ฐฉ์์ ์ฌ์ฉํ์๋ค.
๐โโ๏ธ CA(Certificate Authority)๋?
- certification authority (CA)๋ ๊ณต๊ฐํค์ ๊ณต๊ฐ DNS๋ช (ex.www.example.com)์ ์ฐ๊ฒฐ์ ๋ณด์ฅํ๋ ๊ธฐ๊ด์ด๋ค. ๋ฐ๋ผ์ ์ ๋ขฐ์ฑ์ด ์๊ฒฉํ๊ฒ ๊ณต์ธ๋ ๊ธฐ์ ๋ค๋ง ์ฐธ์ฌํ ์ ์๋ค.
- ์์ ๋ง์ ์ํธํ ํค๋ก ์น์ฌ์ดํธ์ ๊ณต๊ฐํค๋ฅผ ์ํธํ์ ์ผ๋ก ์ฌ์ธํ๋ ๋ฐ ์ฌ์ฉํจ์ผ๋ก์จ ํน์ ๊ณต๊ฐํค๊ฐ ํน์ ์ฌ์ดํธ์ ๊ณต๊ฐํค๋ผ๋ ๊ฒ์ ๋ณด์ฅํ๋ค. ์ด ์๋ช ์ ๊ณ์ฐ์ ์ผ๋ก ์์กฐํ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ธ๋ผ์ฐ์ (๊ทธ ์ธ ํด๋ผ์ด์ธํธ)๋ ์ ์๋ ค์ง CS๊ฐ ์์ ํ ๊ณต๊ฐํค๋ฅผ ๋ณด๊ดํ๋ ์ ๋ขฐํ ์ ์๋ anchor ์ ์ฅ์(trust anchor stores)๋ฅผ ์ ์งํ๊ณ CS ์๋ช ์ ์ํธํ์ ์ผ๋ก ํ์ธํ๋๋ฐ ์ด ๊ณต๊ฐํค๋ฅผ ์ฌ์ฉํ๋ค.
๐โโ๏ธ SSL(TLS)์ด๋?
HTTPS๋ SSL(Secure Socket Layer)/TLS(Transport Layer Security) ์ ์ก ๊ธฐ์ ์ ์ฌ์ฉํ๋ค. TCP, UDP์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์ธํฐ๋ท ํต์ ์ ์์ ํ ๊ณ์ธต(layer)์ ์ถ๊ฐํ๋ ๋ฐฉ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ์ ์ ๊ตฌํํ๊ธฐ ์ํด ์น ์๋ฒ์ ์ค์นํ๋ ๊ฒ์ด SSL/TLS ์ธ์ฆ์์ด๋ค. TLS๋ SSL์ ๊ฐ์ ๋ฒ์ ์ด๋ฉฐ, ์ต์ ์ธ์ฆ์๋ TLS๋ฅผ ์ฌ์ฉํ์ง๋ง ํธ์์ ์ผ๋ก SSL ์ธ์ฆ์๋ผ๊ณ ๋ถ๋ฆฌ์ด๋ค.

๐ Reference
1. https://mangkyu.tistory.com/98
2. https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/HTTP%20%26%20HTTPS.md
3. https://rachel-kwak.github.io/2021/03/08/HTTPS.html
4. https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/