Skip to content

Latest commit

Β 

History

History
259 lines (139 loc) Β· 17.6 KB

HTTP-HTTPS.md

File metadata and controls

259 lines (139 loc) Β· 17.6 KB

HTTP / HTTPS

HTTPλŠ” HTML λ¬Έμ„œμ™€ 같은 λ¦¬μ†ŒμŠ€λ“€μ„ κ°€μ Έμ˜¬ 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” ν”„λ‘œν† μ½œμ΄λ‹€. μ›Ήμ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” λͺ¨λ“  데이터 κ΅ν™˜μ˜ 기초이며, ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ν”„λ‘œν† μ½œμ΄κΈ°λ„ ν•˜λ‹€.

좜처: MDN - HTTP κ°œμš”


HTTP

HTTP(Hypertext Transfer Protocol)λŠ” μœ„μ— MDNμ—μ„œ μ„€λͺ…ν•œ 것과 같이 μ›Ήμ—μ„œ 톡신을 함에 μžˆμ–΄ κ°€μž₯ μ€‘μš”ν•œ ν”„λ‘œν† μ½œμ€‘ ν•˜λ‚˜μ΄λ‹€.

μ—¬κΈ°μ„œ ν”„λ‘œν† μ½œμ΄λž€? 톡신을 μœ„ν•΄ μƒν˜Έκ°„μ— μ •μ˜ν•œ κ·œμΉ™ μ •λ„λ‘œ μ„€λͺ…이 κ°€λŠ₯ν•  것 κ°™λ‹€.

μ—¬λŸ¬ λ‚˜λΌ μ‚¬λžŒλ“€μ΄ λŒ€ν™”λ₯Ό ν•  λ•Œ, μžμ‹ λ“€λ§Œμ˜ μ–Έμ–΄λ‘œλ§Œ 말을 ν•œλ‹€λ©΄? 아에 λŒ€ν™” μžμ²΄κ°€ 이루어지지 μ•ŠλŠ”λ‹€! 그렇기에 ν•˜λ‚˜μ˜ κ³΅μš©μ–΄λ‚˜ ν•΄λ‹Ή μ–Έμ–΄λ‘œ 톡역을 해쀄 톡역사λ₯Ό 놓고 νšŒλ‹΄μ„ μ§„ν–‰ν•˜λ“―μ΄ 컴퓨터 간에 λŒ€ν™”λ₯Ό ν•˜κΈ° μœ„ν•΄ μš°λ¦¬λŠ” ν”„λ‘œν† μ½œμ΄λž€ 것을 λ§Œλ“€μ–΄ μ‚¬μš©ν•˜κ²Œ 된 것이닀.

HTTP은 OSI 7κ³„μΈ΅μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³„μΈ΅μ˜ ν”„λ‘œν† μ½œλ‘œμ„œ, μ‹ λ’°κ°€ κ°€λŠ₯ν•œ ν”„λ‘œν† μ½œμ΄λ©΄ 무엇이든 κ°€λŠ₯ν•˜λ‹€.(이둠상) 보톡 TCP ν˜Ήμ€ TLSλ₯Ό 톡해 μ „μ†‘λœλ‹€.

HTTP의 νŠΉμ§•

  • κ°„λ‹¨ν•˜λ‹€!

    HTTPλŠ” μ‚¬λžŒμ΄ 읽을 수 있으며 κ°„λ‹¨ν•˜κ²Œ κ³ μ•ˆμ΄ λ˜μ—ˆλ‹€. HTTP/2κ°€ κΈ°μ‘΄ 1.1에 λΉ„ν•΄ 많이 λ³΅μž‘ν•΄μ§€κΈ΄ ν–ˆμ§€λ§Œ, μ—¬μ „νžˆ HTTP λ©”μ‹œμ§€λ₯Ό ν”„λ ˆμž„λ³„λ‘œ μΊ‘μŠν™”ν•˜μ—¬ 간결함을 μœ μ§€ν•œλ‹€.

  • ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€.

    HTTP/1.0μ—μ„œ μ†Œκ°œλœ HTTP ν—€λ”λŠ” HTTPλ₯Ό ν™•μž₯ν•˜κ³  μ‹€ν—˜ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄ μ£Όμ—ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μƒˆλ‘œμš΄ 헀더에 λŒ€ν•΄ κ°„λ‹¨ν•œ ν•©μ˜λ₯Ό ν•œλ‹€λ©΄, μ–Έμ œλ“ μ§€ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ ν•  수 μžˆλ‹€.

  • μƒνƒœλŠ” μ—†μ§€λ§Œ, μ„Έμ…˜μ€ 쑴재!

    HTTPλŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.(Stateless) λ™μΌν•œ μ—°κ²° μƒμ—μ„œ λ‘κ°œμ˜ μš”μ²­ μ‚¬μ΄μ—λŠ” μ—°κ²°κ³ λ¦¬λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. HTTP의 핡심은 μƒνƒœκ°€ μ—†λŠ” κ²ƒμ΄μ§€λ§Œ, HTTP μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜λ©΄ μƒνƒœκ°€ μ‘΄μž¬ν•˜λŠ” μ„Έμ…˜μ„ λ§Œλ“€μ–΄ μ€€λ‹€. 헀더 ν™•μž₯성을 μ‚¬μš©ν•˜μ—¬, λ™μΌν•œ μ»¨ν…μŠ€νŠΈμ™€ μƒνƒœλ₯Ό κ³΅μœ ν•˜κΈ° μœ„ν•΄ 각각의 μš”μ²­λ“€μ— μ„Έμ…˜μ„ λ§Œλ“€ 수 μžˆλ„λ‘ HTTP μΏ ν‚€κ°€ μΆ”κ°€λœλ‹€.

  • HTTP와 μ—°κ²°

    데이터λ₯Ό μ£Όκ³  λ°›κΈ°μœ„ν•΄ μ„œλ‘œ μ—°κ²°ν•˜λŠ” 과정은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측이 μ•„λ‹Œ 전솑 κ³„μΈ΅μ—μ„œ μ΄λ£¨μ–΄μ§€λ―€λ‘œ HTTP의 μ—­ν• μ—μ„œ λ²—μ–΄λ‚œλ‹€. λ”°λΌμ„œ HTTPλŠ” 연결에 μžˆμ–΄ μ‹ λ’°ν•  수 μžˆκ±°λ‚˜, 손싀이 μ—†λŠ”(μ΅œμ†Œν•œμœΌλ‘œ 였λ₯˜λŠ” ν‘œμ‹œ) 방법을 μš”κ΅¬ν•  수 밖에없닀.

    인터넷 μƒμ—μ„œ κ°€μž₯ 일반적인 전솑 ν”„λ‘œν† μ½œμ€ UDP와 TCPκ°€ μ‘΄μž¬ν•œλ‹€. UDPλŠ” μ•Œλ‹€μ‹œν”Ό 손싀이 일어날 수 μžˆλŠ” 전솑 ν”„λ‘œν† μ½œμ΄λ―€λ‘œ HTTPλŠ” TCP ν‘œμ€€μ— μ˜μ‘΄ν•œλ‹€.

HTTP의 μ œμ–΄

μ•žμ„œ λ§ν•œ HTTP의 νŠΉμ§•μ€‘ ν•˜λ‚˜μΈ ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€λŠ” 덕뢄에 κ³„μ†ν•΄μ„œ μ›Ήμ˜ λ§Žμ€ κΈ°λŠ₯듀을 μ œμ–΄ν•  수 μžˆλ„λ‘ 진화해왔닀. κ³Όμ—° μ–΄λ–€ κΈ°λŠ₯듀이 생겨났고 μ–΄λ–»κ²Œ μ œμ–΄λ₯Ό ν•œλ‹€λŠ” κ²ƒμΌκΉŒ?

  • μΊμ‹œ

    HTTP둜 λ¬Έμ„œκ°€ μΊμ‹œλ˜λŠ” 방식을 μ œμ–΄κ°€λŠ₯ν•˜λ‹€. μ„œλ²„λŠ” μΊμ‹œ λŒ€μƒκ³Ό 기간을 ν΄λΌμ΄μ–ΈνŠΈμ™€ ν”„λ‘μ‹œμ—κ²Œ μ§€μ‹œν•  수 있으며, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œλŠ” μ €μž₯된 λ¬Έμ„œλ₯Ό λ¬΄μ‹œν•˜λΌκ³  쀑간에 μ‘΄μž¬ν•˜λŠ” μΊμ‹œ ν”„λ‘μ‹œμ—κ²Œ μ§€μ‹œλ₯Ό ν•  수 μžˆλ‹€.

  • Origin μ œμ•½μ‚¬ν•­ μ™„ν™”

    μŠ€λˆ„ν•‘κ³Ό λ‹€λ₯Έ ν”„λΌμ΄λ²„μ‹œ μΉ¨ν•΄λ₯Ό 막기 μœ„ν•΄, λΈŒλΌμš°μ €μ—μ„œλŠ” μ›Ή μ‚¬μ΄νŠΈ κ°„μ˜ μ—„κ²©ν•œ 뢄리λ₯Ό κ°•μ œν•œλ‹€.(Same-origin policy) ν•˜μ§€λ§Œ 이λ₯Ό HTTP 헀더λ₯Ό 톡해 μ™„ν™” μ‹œν‚¬ 수 있으며, 이덕뢄에 λ¬Έμ„œλŠ” λ‹€λ₯Έ λ„λ©”μΈμœΌλ‘œλΆ€ν„° μ „λ‹¬λœ 정보λ₯Ό νŒ¨μΉ˜μ›Œν¬ ν•  수 μžˆλ‹€.

  • 인증

    κΈ°λ³Έ 인증은 HTTPλ₯Ό 톡해 WWW-Authenticate λ˜λŠ” μœ μ‚¬ν•œ 헀더λ₯Ό 톡해 μ œκ³΅λ˜κ±°λ‚˜ HTTP μΏ ν‚€λ₯Ό 톡해 νŠΉμ • μ„Έμ…˜μ„ μ„€μ •ν•˜μ—¬ μ΄λ£¨μ–΄μ§ˆ 수 μžˆλ‹€.

  • ν”„λ‘μ‹œμ™€ 터널링

    보톡 HTTP μš”μ²­μ€ λ„€νŠΈμ›Œν¬ μž₯벽을 κ°€λ‘œμ§€λ₯΄κΈ° μœ„ν•΄ ν”„λ‘μ‹œλ₯Ό 톡해 λ‚˜κ°€κ²Œ λ˜λŠ”λ°, λͺ¨λ“  ν”„λ‘μ‹œκ°€ HTTP만 λ™μž‘μ΄ κ°€λŠ₯ν•œ 것이 μ•„λ‹Œ 쒀더 μ €μˆ˜μ€€μ—μžˆλŠ” SOCKS ν”„λ‘œν† μ½œ 등도 λ™μž‘μ΄ κ°€λŠ₯ν•˜λ„λ‘ ν•΄μ€€λ‹€.

  • μ„Έμ…˜

    μΏ ν‚€μ˜ μ‚¬μš©μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό μ„œλ²„μ— 전솑 ν•  수 있게 λœλ‹€. μ΄λŠ” HTTPκ°€ μƒνƒœκ°€ μ—†λŠ” ν”„λ‘œν† μ½œμ΄μ§€λ§Œ, μ„Έμ…˜μ„ λ§Œλ“€μ–΄ 쀄 수 있게 ν•œλ‹€.


HTTP/2

웹은 초기 λͺ¨μŠ΅κ³ΌλŠ” 달리 맀우 λ³΅μž‘ν•œ λ™μž‘μ„ μš”κ΅¬λ‘œν•˜λŠ” λͺ¨μŠ΅μœΌλ‘œ μ§„ν™”λ˜μ—ˆλ‹€. 그렇기에 더 λ§Žμ€ 데이터듀이 더 λ§Žμ€ μš”μ²­μœΌλ‘œ μ£Όκ³  λ°›λŠ” λ°μ΄ν„°μ˜ 양듀이 λ§Žμ•„μ§€κ²Œ λ˜μ—ˆκ³ , HTTP/1.1둜 λ§Œμ€ κ·Έ λ§Žμ€ 양을 κ°λ‹Ήν•˜κΈ°μ— νž˜λ“  감이 μ‘΄μž¬ν•œλ‹€. HTTP의 κΈ°λ³Έ λ™μž‘ 방식을 보며 μ™œ νž˜λ“ μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.

이전 HTTP λ™μž‘λ°©μ‹

1.0

HTTP/1.0μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” 좔가적인 μš”μ²­μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” TCP 연결을 끊고 λ‹€μ‹œ 연결을 λ§Ίκ³  ν•΄μ•Όλ§Œ ν–ˆλ‹€. λ”°λΌμ„œ μ‹œκ°„κ³Ό μžμ› μΈ‘λ©΄μ—μ„œ λ§Žμ€ λΉ„μš©μ΄ μ†Œμš”λ˜μ—ˆλ‹€.

1.1

HTTP/1.0의 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 지속적인 μ—°κ²°, νŒŒμ΄ν”„ 라이닝을 λ„μž…ν•˜μ—¬ κ³„μ†ν•΄μ„œ 연결을 λ§Ίκ³  λŠλŠ” κ²ƒμœΌλ‘œ μΈν•œ μ˜€λ²„ν—€λ“œλ₯Ό μ€„μ΄κ²Œ λ˜μ—ˆλ‹€.

지속적인 μ—°κ²°(Persistent Connection) 을 ν–ˆμ„ κ²½μš°μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 응닡을 받지 μ•Šλ”λΌλ„ ν•΄λ‹Ή 연결을 톡해 μ—¬λŸ¬ μš”μ²­μœΌ 보낼 수 μžˆμœΌλ―€λ‘œ 이전보닀 μ„±λŠ₯이 많이 κ°œμ„ λ˜μ—ˆλ‹€.

좜처 : HTTP/1.1 의 HTTP Pipelining κ³Ό Persistent Connection 에 λŒ€ν•˜μ—¬

연결을 λŠμ§€ μ•ŠλŠ” κ²ƒλ§ŒμœΌλ‘œλ„ λ§Žμ€ κ°œμ„ μ΄ λ˜μ—ˆμ§€λ§Œ, 또 λ‹€λ₯Έ 단점은 μ—¬μ „νžˆ μ‘΄μž¬ν–ˆλ‹€. μ•„λž˜μ˜ μ™Όμͺ½ κ·Έλ¦Ό(no pipelining)κ³Ό 같이 HTTP/1.1의 경우 기본적으둜 ν•˜λ‚˜μ˜ Connectionλ‹Ή ν•˜λ‚˜μ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ²Œ 섀계λ₯Ό 해놓아 λ™μ‹œ 전솑이 λΆˆκ°€λŠ₯ν•˜λ©° μš”μ²­κ³Ό 응닡이 순차적으둜 이루어진닀.

좜처 : HTTP/1.1 의 HTTP Pipelining κ³Ό Persistent Connection 에 λŒ€ν•˜μ—¬

이런 점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 1.1μ—μ„œλŠ” Pipeliningμ΄λΌλŠ” 기법을 톡해 μš”μ²­μ„ μ—°μ†ν•΄μ„œ 보낼 μˆ˜λ„ μžˆλ‹€. 이λ₯Ό 톡해 ν•˜λ‚˜μ˜ Connectionμ—μ„œλ„ λ‹€μˆ˜μ˜ μš”μ²­κ³Ό 응닡을 μ²˜λ¦¬ν•˜μ—¬ λ„€νŠΈμ›Œν¬ 지연을 쀄일 수 μžˆμ–΄μ‘Œλ‹€.

ν•˜μ§€λ§Œ, μ΄λŠ” λ‹¨μˆœνžˆ μš”μ²­λ“€μ— λŒ€ν•œ 응닡 처리λ₯Ό λ―Έλ£¨λŠ” 방법을 μ‚¬μš©ν•œ κ²ƒμ΄λ―€λ‘œ 각 응닡에 λŒ€ν•œ μ²˜λ¦¬λŠ” 순차적으둜 μ²˜λ¦¬κ°€ λ˜μ–΄, 첫번째 μ‘λ‹΅μ˜ μ²˜λ¦¬κ°€ λŠ¦μ„ 수둝 뒀에 μžˆλŠ” 응닡은 지연될 수 밖에 μ—†λ‹€. 이λ₯Ό Head Of Line(HOL) Blocking라고 λΆ€λ₯΄λ©° Pipelining의 큰 λ¬Έμ œμ μ΄λ‹€.

λ˜ν•œ 헀더에 λ§Žμ€ μ„€μ • 값듀을 λ„£μ–΄ μš”μ²­/응닡 바디보닀 더 큰 값을 μ „μ†‘ν•˜λŠ” κ²½μš°κ°€ μ‘΄μž¬ν–ˆλ‹€.

이와 같이 HTTP/1.0, 1.1의 단점듀을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ 방법듀을 κ°œλ°œν•΄μ™”μœΌλ‚˜ 근본적인 λ¬Έμ œλŠ” μ—¬μ „νžˆ ν•΄κ²°ν•  수 μ—†μ—ˆλ‹€. 그렇기에 κ΅¬κΈ€μ—μ„œλŠ” μ§€μ—°μœ¨ κ΄€μ μ—μ„œ HTTPλ₯Ό κ³ μ†ν™”ν•œ SPDY(NAVER D2 SPDY)라 λΆˆλ¦¬μš°λŠ” ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜μ˜€λŠ”λ°, μ΄λŠ” HTTP/2κ°€ 세상에 λ‚˜μ˜€κ²Œ 될 수 μžˆλŠ” λ°œνŒμ„ λ§ˆλ ¨ν–ˆλ‹€.

HTTP/2 νŠΉμ§•

"HTTP/2λŠ” ν”„λ‘œν† μ½œμ„ μ™„μ „νžˆ λ‹€μ‹œ μž‘μ„±ν•˜λŠ” 것이 μ•„λ‹Œ, μ„±λŠ₯에 μ΄ˆμ μ„ 두고 μžˆλ‹€." - HTTP/2 곡식 Github

κ³Όμ—° μ–΄λ– ν•œ νŠΉμ§•λ“€λ‘œ HTTP/1.1의 단점듀을 λ³΄μ™„ν•˜κ³  μžˆμ„κΉŒ?

  • Multiplexed Streams

    ν•œ 컀λ„₯μ…˜μœΌλ‘œ λ™μ‹œμ— μ—¬λŸ¬κ°œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³  받을 수 있으며, 응닡은 μˆœμ„œμ— 상관 없이 Stream으둜 μ£Όκ³  λ°›λŠ”λ‹€. μ΄λŠ” 1.1μ—μ„œ Connection Keep-Alive, Pipelinig의 κ°œμ„ μ μ΄λ‹€.

  • Stream Prioritization

    Multiplexed Streams λΌλŠ” νŠΉμ§•μœΌλ‘œ 응닡 μˆœμ„œλ₯Ό 상관없이 Stream으둜 μ£Όκ³  λ°›κ³  μžˆλ‹€κ³  ν–ˆλ‹€. λ§Œμ•½, HTML에 CSSκ°€ μ‘΄μž¬ν•˜λŠ”λ° CSS의 응닡이 지연이 λ˜μ–΄ λ Œλ”λ§μ΄ λŠ¦μ–΄μ§„λ‹€λ©΄ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. λ”°λΌμ„œ, 2μ—μ„œλŠ” λ¦¬μ†ŒμŠ€κ°„μ— μ˜μ‘΄κ΄€κ³„(μš°μ„ μˆœμœ„)λ₯Ό μ„€μ •ν•  수 있게 ν•˜μ—¬ ν•΄λ‹Ή 문제λ₯Ό ν•΄κ²°ν•œλ‹€.

  • Server Push

    1.1μ—μ„œλŠ” HTML λ¬Έμ„œλ₯Ό μš”μ²­ν•˜κ³  응닡을 받은 후에 νŒŒμ‹±μ„ ν•˜λ©° ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μž¬μš”μ²­μ„ ν–ˆλ‹€κ³  ν•œλ‹€λ©΄, 2μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ ν•˜μ§€ μ•Šλ”λΌλ„ 미리 λ¦¬μ†ŒμŠ€λ₯Ό μ£ΌλŠ” λ°©λ²•μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ™€μ˜ 컀λ„₯μ…˜μ„ μ΅œμ†Œν™” ν•  수 μžˆλ„λ‘ ν•œλ‹€. μ΄λŠ” PUSH_PROMISE라고 λΆ€λ₯΄λ©°, PUSH_PROMISEλ₯Ό 톡해 μ„œλ²„κ°€ μ „μ†‘ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • Header Compression

    λ°©λŒ€ν•œ 헀더 정보λ₯Ό μ••μΆ•ν•˜κΈ° μœ„ν•΄ Header Tableκ³Ό Huffman Encoding 기법을 μ‚¬μš©ν•˜λŠ”λ° 이λ₯Ό HPACK μ••μΆ• 방식이라 λΆ€λ₯Έλ‹€. λ˜ν•œ, μ—¬λŸ¬λ²ˆμ˜ μš”μ²­μ—μ„œ Static/Dynamic Header Table κ°œλ…μ„ μ‚¬μš©ν•˜μ—¬ μ€‘λ³΅λœ 헀더λ₯Ό κ²€μΆœν•˜μ—¬ 전체λ₯Ό λ³΄λ‚΄λŠ” 것이 μ•„λ‹Œ 헀더 μ •λ³΄κ°’λ§Œ μ „μ†‘ν•˜κ²Œ λœλ‹€.


HTTPS

HTTPSλŠ” HTTP + Secure Socket 으둜 κΈ°μ‘΄ HTTP둜 데이터λ₯Ό μ£Όκ³  λ°›λŠ” κ²ƒμ—μ„œ SSL(Secure Socket Layer) ν”„λ‘œν† μ½œμ„ 톡해 데이터 μ•”ν˜Έν™”λ₯Ό μΆ”κ°€ν•œ 것이닀.

TLS(Transport Layer Security)둜 μ•Œκ³ μžˆλŠ” μ‚¬λžŒμ΄ μžˆμ„ν…λ° μ΄λŠ” SSL의 μ—…κ·Έλ ˆμ΄λ“œ 버전이며 ν‘œμ€€ν™”κ°€ λ˜λ©΄μ„œ 이름이 λ³€κ²½λ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ 아직도 TLSλ³΄λ‹€λŠ” SSLμ΄λž€ μ΄λ¦„μœΌλ‘œ 더 널리 μ‚¬μš©λ˜κ³  μžˆλ‹€.

μ™œ HTTPSλ₯Ό μ‚¬μš©ν• κΉŒ?

HTTP둜 데이터λ₯Ό μ£Όκ³  받을 λ•ŒλŠ” 주둜 평문(text)을 μ‚¬μš©ν•˜λŠ”λ°, μ΄λŠ” ꡉμž₯히 μœ„ν—˜ν•œ 일이닀.

예λ₯Όλ“€μ–΄ μ–΄λ– ν•œ μ‚¬μ΄νŠΈμ— λ‘œκ·ΈμΈμ„ ν•œλ‹€κ³  ν•˜μž. λ‘œκ·ΈμΈμ„ ν•˜κΈ° μœ„ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ 아이디, λΉ„λ°€λ²ˆν˜Έλ₯Ό λ„˜κΈ°κ²Œ λœλ‹€. 이 κ³Όμ •μ—μ„œ 해컀가 ν•΄λ‹Ή 데이터λ₯Ό 쀑간에 κ°€λ‘œμ±Œ 수 있으며, μ•”ν˜Έν™”κ°€ λ˜μ–΄μžˆμ§€ μ•Šμ•„ ꡉμž₯히 치λͺ…적이닀.

λ”°λΌμ„œ, 이λ₯Ό κ·Ήλ³΅ν•˜κ³ μž HTTP에 SSLμ΄λΌλŠ” ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 데이터에 μ•”ν˜Έν™”λ₯Ό μ§„ν–‰ν•œλ‹€.


SSL(TLS)

μ•”ν˜Έν™” 방식

SSLμ—μ„œλŠ” λ³΄μ•ˆκ³Ό μ„±λŠ₯μƒμ˜ 이유둜 두가지 μ•”ν˜Έν™” 기법을 ν˜Όμš©ν•΄μ„œ μ‚¬μš©ν•˜λŠ”λ°, SSL이 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ μ•ŒκΈ° μœ„ν•΄μ„œλŠ” ν•΄λ‹Ή μ•”ν˜Έν™” 기법을 μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€.

  • λŒ€μΉ­ν‚€

    λŒ€μΉ­ν‚€λŠ” 말 κ·ΈλŒ€λ‘œ μ•”ν˜Έν™”/λ³΅ν˜Έν™” μ‹œμ— λ™μΌν•œ ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” μ•”ν˜Έν™” 방식을 λ§ν•œλ‹€. 즉, Jongnanμ΄λΌλŠ” ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•”ν˜Έν™”λ₯Ό ν–ˆλ‹€λ©΄, Jongnan을 μ‚¬μš©ν•˜μ—¬ λ³΅ν˜Έν™”λ₯Ό ν•œλ‹€.

  • κ³΅κ°œν‚€

    λŒ€μΉ­ν‚€μ—μ„œμ˜ 큰 단점은 같은 ν‚€λ₯Ό μ‚¬μš©ν•˜κ³  μžˆκΈ°λ•Œλ¬Έμ— 해컀가 ν‚€λ₯Ό μ–»λŠ”λ‹€λ©΄, μ‰½κ²Œ λ³΅ν˜Έν™”λ₯Ό ν•  수 μžˆλ‹€λŠ” 것이닀. 이 λ•Œλ¬Έμ— λ‚˜μ˜¨ μ•”ν˜Έν™” 방식이 λ°”λ‘œ κ³΅κ°œν‚€ 방식이닀.

    κ³΅κ°œν‚€ 방식은 λ‘κ°œμ˜ ν‚€λ₯Ό κ°€μ§€κ²Œ λ˜λŠ”λ°, ν•˜λ‚˜λŠ” μ•”ν˜Έν™”λ₯Ό ν•˜λŠ” ν‚€, 또 λ‹€λ₯Έ ν•˜λ‚˜λŠ” λ³΅ν˜Έν™”λ₯Ό ν•˜λŠ” 킀이닀. 이 λ•Œ μžμ‹ λ§Œ 가지고 μžˆλŠ” ν‚€λ₯Ό λΉ„κ³΅κ°œν‚€, νƒ€μΈμ—κ²Œ μ œκ³΅λ˜λŠ” ν‚€λ₯Ό κ³΅κ°œν‚€λΌκ³  ν•œλ‹€. κ³΅κ°œν‚€λ₯Ό 제곡 받은 타인은 κ³΅κ°œν‚€λ₯Ό μ΄μš©ν•˜μ—¬ 정보λ₯Ό μ•”ν˜Έν™” ν•˜κ³  이λ₯Ό μ „μ†‘ν•œλ‹€. μ•”ν˜Έν™”λœ 정보λ₯Ό λΉ„κ³΅κ°œν‚€λ‘œ λ³΅ν˜Έν™”ν•˜λŠ” λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ£Όκ³  λ°›λŠ”λ‹€. 이 κ³Όμ •μ—μ„œ κ³΅κ°œν‚€κ°€ 해컀에 μ˜ν•΄ νƒˆμ·¨ 당해도 μ•”ν˜Έν™”λ§Œ κ°€λŠ₯ν•˜λ―€λ‘œ λŒ€μΉ­ν‚€μ— λΉ„ν•΄ μ•ˆμ „ν•˜λ‹€.

    ν•΄λ‹Ή 방식을 μ‘μš©ν•΄μ„œ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 도 μžˆλ‹€.

    • λΉ„κ³΅κ°œν‚€μ˜ μ†Œμœ μžκ°€ λΉ„κ³΅κ°œν‚€λ₯Ό μ΄μš©ν•΄μ„œ 정보λ₯Ό μ•”ν˜Έν™” ν•œ 뒀에 κ³΅κ°œν‚€μ™€ ν•¨κ»˜ 전솑
    • κ³΅κ°œν‚€λ₯Ό μ΄μš©ν•˜μ—¬ μ•”ν˜Έν™”λœ 정보λ₯Ό λ³΅ν˜Έν™”

    이와 같은 λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ”λ°, 쀑간에 ν•΄λ‹Ή ν‚€κ°€ νƒˆμ·¨λ‹Ήν•˜μ—¬ 정보가 λ…ΈμΆœμ΄ 될 수 μžˆλ‹€.

    그런데 μ™œ μ•”ν˜Έν™”λ₯Ό ν•˜λŠ” 것인가?

    이 λ°©μ‹μ˜ μ£Όμš” λͺ©μ μ€ 신원을 보μž₯ν•˜λŠ”λ° μžˆλ‹€. μ•”ν˜Έν™”λœ 데이터λ₯Ό κ³΅κ°œν‚€λ₯Ό 가지고 λ³΅ν˜Έν™” ν•  수 μžˆλ‹€λŠ” 것은 κ·Έ 데이터가 κ³΅κ°œν‚€μ™€ μŒμ„ μ΄λ£¨λŠ” λΉ„κ³΅κ°œ 킀에 μ˜ν•΄ μ•”ν˜Έν™” λ˜μ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. 즉, κ³΅κ°œν‚€κ°€ 데이터λ₯Ό μ œκ³΅ν•œ μ‚¬λžŒμ˜ 신원을 보μž₯ν•΄μ£ΌλŠ” 것이닀.

    이가 λ°”λ‘œ μ „μž μ„œλͺ…이닀.

SSL μΈμ¦μ„œ

SSL ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μΈμ¦μ„œκ°€ ν•„μš”ν•˜λ‹€. μ΄λŠ” 제 3자(CA)κ°€ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„μ˜ 톡신을 λ³΄μ¦ν•΄μ£ΌλŠ” μ „μž λ¬Έμ„œμ΄λ‹€. μ΄λŸ¬ν•œ μΈμ¦μ„œλŠ” 크게 2κ°€μ§€λ‘œ κ΅¬λΆ„λ˜μ–΄ 진닀.

  • μ„œλΉ„μŠ€ 정보(μΈμ¦μ„œλ₯Ό λ°œκΈ‰ν•œ CA, μ„œλΉ„μŠ€ 도메인 λ“±)

    ν΄λΌμ΄μ–ΈνŠΈκ°€ μ ‘μ†ν•œ μ„œλ²„κ°€ μ μ ˆν•œ μ„œλ²„μΈμ§€μ— λŒ€ν•œ λ‚΄μš©

  • μ„œλ²„μΈ‘ κ³΅κ°œν‚€(κ³΅κ°œν‚€ λ‚΄μš©, κ³΅κ°œν‚€ μ•”ν˜Έν™” 방법)

    톡신에 μ‚¬μš©λ  κ³΅κ°œν‚€μ™€ μ•”ν˜Έν™” 방식

이 λ‚΄μš©λ“€μ€ CA에 μ˜ν•΄ λΉ„κ³΅κ°œν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•”ν˜Έν™”λ₯Ό ν•˜κ³ , μ„œλ²„λŠ” 이λ₯Ό 가지고 μžˆμœΌλ©΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 증λͺ…ν•˜κΈ° μœ„ν•΄ μ „λ‹¬ν•œλ‹€. 이후 ν΄λΌμ΄μ–ΈνŠΈλŠ” 이 μΈμ¦μ„œκ°€ μ‹ λ’°ν•  수 μžˆλŠ” 것인지λ₯Ό κ²€μ¦ν•œ λ’€ 톡신을 μ‹œμž‘ν•˜κ²Œ λœλ‹€.

CA

μ΄λŸ¬ν•œ μΈμ¦μ„œλ₯Ό μ œκ³΅ν•˜λŠ” 기업듀이 μžˆλŠ”λ° 이λ₯Ό CA(Certificate authority) ν˜Ήμ€ Root Certificate라고 λΆ€λ₯Έλ‹€. CAλŠ” 아무 κΈ°μ—…μ΄λ‚˜ ν•  수 μžˆλŠ” 것이 μ•„λ‹Œ 신뒰성이 높은 κΈ°μ—…λ“€λ§Œ μ°Έμ—¬κ°€ κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ 개발 ν˜Ήμ€ 사적인 λͺ©μ μ„ μœ„ν•΄ SSL의 μ•”ν˜Έν™” κΈ°λŠ₯을 μ‚¬μš©ν•œλ‹€λ©΄ 직접 CA의 역할도 ν•  순 μžˆμ§€λ§Œ κ²½κ³  λ¬Έκ΅¬λŠ” 사라지지 μ•ŠλŠ”λ‹€.

CA list

λΈŒλΌμš°μ €μ—μ„œλŠ” μΈμ¦μ„œλ₯Ό μ΄ν•΄ν•˜λŠ”λ° CA 리슀트λ₯Ό 가지고 있으며 미리 νŒŒμ•…μ„ ν•˜κ³  μžˆλ‹€. 즉, 곡인된 CA만 ν•΄λ‹Ή λ¦¬μŠ€νŠΈμ— λ“€μ–΄κ°ˆ 수 있으며 λΈŒλΌμš°μ €λŠ” CA κ³΅κ°œν‚€λ₯Ό 이미 μ•Œκ³  μžˆλŠ” μ…ˆμ΄λ‹€.

인증 κ³Όμ •

  1. μ›Ή λΈŒλΌμš°μ €κ°€ μ„œλ²„μ— 접속할 λ•Œ, μ„œλ²„λŠ” λ¨Όμ € μΈμ¦μ„œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 제곡

  2. λΈŒλΌμš°μ €λŠ” 이 μΈμ¦μ„œκ°€ CA λ¦¬μŠ€νŠΈμ— μžˆλŠ”μ§€ 확인

  3. 포함이 λ˜μ–΄μžˆλ‹€λ©΄ CA의 κ³΅κ°œν‚€λ₯Ό μ΄μš©ν•˜μ—¬ μΈμ¦μ„œλ₯Ό λ³΅ν˜Έν™”

    λΈŒλΌμš°μ €μ— μ‘΄μž¬ν•˜λŠ” κ³΅κ°œν‚€λ‘œ μΈμ¦μ„œλ₯Ό λ³΅ν˜Έν™” ν•  수 μžˆλ‹€λŠ” 것은 ν•΄λ‹Ή μΈμ¦μ„œκ°€ CA의 λΉ„κ³΅κ°œν‚€λ‘œ μ•”ν˜Έν™” λ˜μ—ˆλ‹€λŠ” 것을 μ˜λ―Έν•˜λ―€λ‘œ ν•΄λ‹Ή μ‚¬μ΄νŠΈλŠ” μ•ˆμ „ν•˜λ‹€λž€ 것을 의미

SSL λ™μž‘ 방식

μ•žμ„œμ„œ SSL이 λ™μž‘ν•˜κΈ° 이전에 μΌμ–΄λ‚˜λŠ” 일듀을 μ•Œμ•„λ³΄μ•˜λ‹€. μœ„ 과정듀이 λͺ¨λ‘ λλ‚˜κ³  λ‚˜μ„œ 톡신을 ν•˜κ²Œ λ˜λŠ”λ° μ–΄λ–€ λ°©μ‹μœΌλ‘œ ν•˜κ²Œλ˜λŠ”μ§€ μ•Œμ•„λ³΄μž.

# Handshake

TCPμ—μ„œ 연결을 ν•˜κΈ° μœ„ν•΄ 3way-handshaking을 μ‚¬μš©ν•˜λ“― SSLμ—μ„œλ„ 이λ₯Ό 톡해 연결을 λ§Ίμ§€λ§Œ, μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 인증 과정이 μΆ”κ°€λ‘œ μ΄λ£¨μ–΄μ§€κ²Œ λœλ‹€.

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 접속(Client Hello)

    • ν΄λΌμ΄μ–ΈνŠΈμΈ‘μ—μ„œ μƒμ„±ν•œ 랜덀 데이터
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ§€μ›ν•˜λŠ” μ•”ν˜Έν™” 방식듀(μ§€μ›ν•˜λŠ” μ•”ν˜Έν™” 방식이 λ‹€λ₯Ό 수 있기 λ•Œλ¬Έ)
    • μ„Έμ…˜ 아이디(κΈ°μ‘΄ μ„Έμ…˜μ„ μž¬ν™œμš© ν•˜κΈ° μœ„ν•΄)
  2. μ„œλ²„μ—μ„œλŠ” 이에 λŒ€ν•œ 응닡을 보냄(Server Hello)

    • μ„œλ²„μΈ‘μ—μ„œ μƒμ„±ν•œ 랜덀 데이터
    • μ„œλ²„κ°€ μ„ νƒν•œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ•”ν˜Έν™” 방식
    • μΈμ¦μ„œ
  3. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ μΈμ¦μ„œλ₯Ό 확인

    • λΈŒλΌμš°μ €μ— μ €μž₯λ˜μ–΄μžˆλŠ” CA 리슀트λ₯Ό ν™•μΈν•˜λ©° μΈμ¦μ„œλ₯Ό λ³΅ν˜Έν™”
    • μ„œλ‘œ μ£Όκ³  받은 랜덀 λ°μ΄ν„°λ‘œ pre master secretμ΄λž€ 값을 생성(μ ˆλŒ€ λ…ΈμΆœ X)
    • pre master secret 값은 μΈμ¦μ„œ 내뢀에 μžˆλŠ” κ³΅κ°œν‚€λ‘œ μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„λ‘œ 전솑
  4. session key 생성

    • μ„œλ²„μ—μ„œλŠ” μ•”ν˜Έν™”λœ pre master secretλ₯Ό μžμ‹ μ˜ λΉ„κ³΅κ°œν‚€λ‘œ λ³΅ν˜Έν™”

    • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλŠ” 일련의 과정을 톡해 master secret κ°’μœΌλ‘œ λ³€κ²½

    • master secret κ°’μœΌλ‘œ session ν‚€λ₯Ό 생성(이둜 데이터 μ•”ν˜Έν™”)

    • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” Handshake λ‹¨κ³„μ˜ μ’…λ£Œλ₯Ό μ„œλ‘œμ—κ²Œ μ•Œλ¦Ό

# Session

μ„Έμ…˜ λ‹¨κ³„λŠ” μ‹€μ œλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 단계이닀. 이 λ•Œ μ€‘μš”ν•œ 점은 μ£Όκ³  λ°›λŠ” λ°μ΄ν„°λŠ” μ „ λ‹¨κ³„μ—μ„œ μƒμ„±ν•œ session keyλ₯Ό μ΄μš©ν•˜μ—¬ μ•”ν˜Έν™”/λ³΅ν˜Έν™” ν•œλ‹€.

μ™œ ν•œκ°€μ§€ 방식을 μ„ νƒν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  두가지 방식을 μ„žμ–΄μ„œ μ‚¬μš©ν•˜λŠ” κ²ƒμΌκΉŒ?

λŒ€μΉ­ν‚€ λ°©μ‹λ§Œ μ‚¬μš©ν•œλ‹€λ©΄ μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 것과 같이 λ…ΈμΆœμ΄ λ˜μ—ˆμ„ λ•Œ, μ—„μ²­λ‚œ ν”Όν•΄λ₯Ό μž…μ„ 수 μžˆλ‹€. κ·Έ λ°˜λŒ€λ‘œ κ³΅κ°œν‚€ λ°©μ‹μœΌλ‘œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ λŒ€μΉ­ν‚€ 보닀 더 λ³΅μž‘ν•˜λ―€λ‘œ μ—¬λŸ¬λͺ¨λ‘œ λΉ„μ‹Ό λΉ„μš©μ„ λ‚΄μ•Όν•œλ‹€. κ·Έλ ‡κ²Œ λœλ‹€λ©΄ 접속이 λͺ°λ¦¬λŠ” μ„œλ²„μ˜ 경우 λ§Žμ€ λΉ„μš©μ„ μ§€λΆˆν•΄μ•Όν•œλ‹€.

λ”°λΌμ„œ, μ†λ„λŠ” λŠλ¦¬μ§€λ§Œ μ•ˆμ „ν•œ κ³΅κ°œν‚€ λ°©μ‹μœΌλ‘œ λŒ€μΉ­ν‚€λ₯Ό μ•”ν˜Έν™”ν•˜κ³ , μ‹€μ œ λ°μ΄ν„°μ˜ 경우 ν•΄λ‹Ή λŒ€μΉ­ν‚€λ₯Ό μ΄μš©ν•΄μ„œ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이닀.

# Session μ’…λ£Œ

λ°μ΄ν„°μ˜ 전솑이 λͺ¨λ‘ μ™„λ£Œ λ˜μ—ˆμ„μ‹œμ— SSL 톡신이 λλ‚¬μŒμ„ μ„œλ‘œμ—κ²Œ μ•Œλ¦°λ‹€. 이 λ•Œ 톡신에 μ‚¬μš©ν•œ λŒ€μΉ­ν‚€λŠ” νκΈ°ν•œλ‹€.



Reference