Search

HTTPS

HTTPS (HyperText Transfer Protocol Secure)

๊ฐœ์š”

HTTPS๋Š” HTTP์— SSL/TLS ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. (ํฌํŠธ 443)
ํ‰์†Œ ์šฐ๋ฆฌ๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ž๋ฌผ์‡  ์•„์ด์ฝ˜์ด ๋ณด์ด๋Š” ๊ฒƒ, ๋ณด์‹  ์  ์žˆ์ฃ ? ๊ทธ๊ฒŒ ๋ฐ”๋กœ HTTPS๊ฐ€ ์ ์šฉ๋œ ์‚ฌ์ดํŠธ๋ผ๋Š” ํ‘œ์‹œ์˜ˆ์š”.
HTTP๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๋ฌธ(Plain Text)์œผ๋กœ ์ „์†กํ•ด์š”. ๋น„์œ ํ•˜๋ฉด, ์—ฝ์„œ์— ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์ ์–ด์„œ ๋ณด๋‚ด๋Š” ๊ฑฐ์˜ˆ์š” โ€” ์šฐ์ฒด๋ถ€๋“  ์ค‘๊ฐ„์— ๋ˆ„๊ตฌ๋“  ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ๋ฐ˜๋ฉด HTTPS๋Š” ํŽธ์ง€ ๋ด‰ํˆฌ์— ๋„ฃ๊ณ  ์ž ๊ธˆ์žฅ์น˜๊นŒ์ง€ ์ฑ„์›Œ์„œ ๋ณด๋‚ด๋Š” ๊ฑฐ์˜ˆ์š”. ์ค‘๊ฐ„์— ๋ˆ„๊ฐ€ ๊ฐ€๋กœ์ฑ„๋„ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์—†์ฃ !

HTTP vs HTTPS ๋น„๊ต

ํ•ญ๋ชฉ
HTTP
HTTPS
์ •์‹๋ช…
HyperText Transfer Protocol
HyperText Transfer Protocol Secure
ํฌํŠธ
80
443
์•”ํ˜ธํ™”
์—†์Œ (ํ‰๋ฌธ ์ „์†ก)
SSL/TLS ์•”ํ˜ธํ™”
์ธ์ฆ์„œ
๋ถˆํ•„์š”
SSL/TLS ์ธ์ฆ์„œ ํ•„์š”
๋ฐ์ดํ„ฐ ๋ณดํ˜ธ
๋„์ฒญ, ๋ณ€์กฐ ๊ฐ€๋Šฅ
๋„์ฒญ, ๋ณ€์กฐ ๋ถˆ๊ฐ€
SEO
๋ถˆ๋ฆฌ
์œ ๋ฆฌ (Google ๋žญํ‚น ์š”์†Œ)
๋ธŒ๋ผ์šฐ์ € ํ‘œ์‹œ
"์ฃผ์˜ ์š”ํ•จ"
์ž๋ฌผ์‡  ์•„์ด์ฝ˜
์†๋„
์•ฝ๊ฐ„ ๋น ๋ฆ„
์•ฝ๊ฐ„ ๋А๋ฆผ (์•”ํ˜ธํ™” ์˜ค๋ฒ„ํ—ค๋“œ)
๋น„์œ 
์—ฝ์„œ
๋ฐ€๋ด‰ ํŽธ์ง€
์š”์ฆ˜์€ HTTPS๊ฐ€ ์‚ฌ์‹ค์ƒ ํ•„์ˆ˜์˜ˆ์š”. Google Chrome์€ HTTP ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด "์ฃผ์˜ ์š”ํ•จ"์ด๋ผ๊ณ  ๊ฒฝ๊ณ ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , Google ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ๋„ HTTPS ์‚ฌ์ดํŠธ๊ฐ€ ๋” ๋†’์€ ์ˆœ์œ„๋ฅผ ๋ฐ›์•„์š”. ๋˜ํ•œ HTTP/2, HTTP/3 ๊ฐ™์€ ์ตœ์‹  ํ”„๋กœํ† ์ฝœ๋„ HTTPS ์œ„์—์„œ๋งŒ ๋™์ž‘ํ•ด์š”.

HTTPS ํ†ต์‹  ๊ณผ์ • (TLS Handshake)

sequenceDiagram
    participant ๋ธŒ๋ผ์šฐ์ € as ๐Ÿ‘ค ๋ธŒ๋ผ์šฐ์ €
    participant ์„œ๋ฒ„ as ๐Ÿ–ฅ๏ธ Nginx ์„œ๋ฒ„

    Note over ๋ธŒ๋ผ์šฐ์ €,์„œ๋ฒ„: ๐Ÿค TLS Handshake ์‹œ์ž‘

    ๋ธŒ๋ผ์šฐ์ €->>์„œ๋ฒ„: โ‘  Client Hello<br/>(์ง€์›ํ•˜๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹ ๋ชฉ๋ก)
    ์„œ๋ฒ„-->>๋ธŒ๋ผ์šฐ์ €: โ‘ก Server Hello<br/>(์„ ํƒํ•œ ์•”ํ˜ธํ™” ๋ฐฉ์‹ + ์ธ์ฆ์„œ)

    Note over ๋ธŒ๋ผ์šฐ์ €: โ‘ข ์ธ์ฆ์„œ ๊ฒ€์ฆ<br/>(CA์—๊ฒŒ ์ง„์งœ์ธ์ง€ ํ™•์ธ)

    ๋ธŒ๋ผ์šฐ์ €->>์„œ๋ฒ„: โ‘ฃ ๋Œ€์นญํ‚ค ๊ตํ™˜<br/>(๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†ก)
    ์„œ๋ฒ„-->>๋ธŒ๋ผ์šฐ์ €: โ‘ค Handshake ์™„๋ฃŒ

    Note over ๋ธŒ๋ผ์šฐ์ €,์„œ๋ฒ„: ๐Ÿ” ์•”ํ˜ธํ™” ํ†ต์‹  ์‹œ์ž‘!

    ๋ธŒ๋ผ์šฐ์ €->>์„œ๋ฒ„: ์•”ํ˜ธํ™”๋œ HTTP ์š”์ฒญ
    ์„œ๋ฒ„-->>๋ธŒ๋ผ์šฐ์ €: ์•”ํ˜ธํ™”๋œ HTTP ์‘๋‹ต
Mermaid
๋ณต์‚ฌ
์ด ๊ณผ์ •์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€์–ด๋ณผ๊ฒŒ์š”:
1.
Client Hello โ€” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ "์•ˆ๋…•! ๋‚˜๋Š” ์ด๋Ÿฐ ์•”ํ˜ธํ™” ๋ฐฉ์‹๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด!" ํ•˜๊ณ  ์„œ๋ฒ„์—๊ฒŒ ๋งํ•ด์š”.
2.
Server Hello โ€” ์„œ๋ฒ„๊ฐ€ "์ข‹์•„, ์ด ๋ฐฉ์‹์œผ๋กœ ํ•˜์ž! ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ ๋‚ด ์‹ ๋ถ„์ฆ(์ธ์ฆ์„œ)์ด์•ผ!" ํ•˜๊ณ  ์‘๋‹ตํ•ด์š”.
3.
์ธ์ฆ์„œ ๊ฒ€์ฆ โ€” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์˜ ์ธ์ฆ์„œ๊ฐ€ ์ง„์งœ์ธ์ง€ CA(์ธ์ฆ๊ธฐ๊ด€)๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด์š”.
4.
๋Œ€์นญํ‚ค ๊ตํ™˜ โ€” ์‹ค์ œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”์— ์‚ฌ์šฉํ•  ๋น„๋ฐ€ ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตํ™˜ํ•ด์š”.
5.
์•”ํ˜ธํ™” ํ†ต์‹  โ€” ์ด์ œ๋ถ€ํ„ฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์ „์†ก๋ผ์š”!
์ด ์ „์ฒด ๊ณผ์ •์€ ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„๋กœ ์ˆœ์‹๊ฐ„์— ์ด๋ฃจ์–ด์ ธ์š”. ์‚ฌ์šฉ์ž๋Š” ์ „ํ˜€ ๋А๋ผ์ง€ ๋ชปํ•˜์ฃ !

์•”ํ˜ธํ™” ๋ฐฉ์‹

graph TD
    A[์•”ํ˜ธํ™” ๋ฐฉ์‹] --> B[๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”<br/>Symmetric]
    A --> C[๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”<br/>Asymmetric]

    B --> B1["๊ฐ™์€ ํ‚ค๋กœ ์•”ํ˜ธํ™” + ๋ณตํ˜ธํ™”<br/>๐Ÿ”‘ = ๐Ÿ”‘"]
    B --> B2["์žฅ์ : ๋น ๋ฆ„<br/>๋‹จ์ : ํ‚ค ์ „๋‹ฌ ๋ฌธ์ œ"]
    B --> B3["์˜ˆ: AES-256"]

    C --> C1["๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”<br/>๊ฐœ์ธํ‚ค๋กœ ๋ณตํ˜ธํ™”<br/>๐Ÿ”‘ โ‰  ๐Ÿ—๏ธ"]
    C --> C2["์žฅ์ : ํ‚ค ์ „๋‹ฌ ์•ˆ์ „<br/>๋‹จ์ : ๋А๋ฆผ"]
    C --> C3["์˜ˆ: RSA, ECDSA"]

    style B fill:#90EE90
    style C fill:#87CEEB
Mermaid
๋ณต์‚ฌ
๊ตฌ๋ถ„
๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”
๋น„๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”
ํ‚ค ๊ฐœ์ˆ˜
1๊ฐœ (๊ฐ™์€ ํ‚ค)
2๊ฐœ (๊ณต๊ฐœํ‚ค + ๊ฐœ์ธํ‚ค)
์†๋„
๋น ๋ฆ„
๋А๋ฆผ
์šฉ๋„
์‹ค์ œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”
ํ‚ค ๊ตํ™˜, ์ธ์ฆ์„œ ์„œ๋ช…
๋น„์œ 
๊ฐ™์€ ์—ด์‡ ๋กœ ์ž ๊ทธ๊ณ  ์—ฌ๋Š” ๊ธˆ๊ณ 
์šฐ์ฒดํ†ต (๋ˆ„๊ตฌ๋‚˜ ๋„ฃ์ง€๋งŒ, ์—ด์‡  ๊ฐ€์ง„ ์‚ฌ๋žŒ๋งŒ ์—ด ์ˆ˜ ์žˆ์Œ)
HTTPS๋Š” ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•ด์š”! ์ฒ˜์Œ์— ๋น„๋Œ€์นญํ‚ค๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋Œ€์นญํ‚ค๋ฅผ ๊ตํ™˜ํ•œ ๋‹ค์Œ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ๋น ๋ฅธ ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•ด์„œ ์ฃผ๊ณ ๋ฐ›์•„์š”. ์ด๊ฑธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•”ํ˜ธํ™”๋ผ๊ณ  ํ•ด์š”.

HTTPS ์ „์ฒด ๊ตฌ์กฐ

graph TB
    subgraph "HTTPS = HTTP + TLS"
        A[HTTP ๋ฐ์ดํ„ฐ<br/>์š”์ฒญ/์‘๋‹ต ๋‚ด์šฉ] --> B[TLS ์•”ํ˜ธํ™” ๊ณ„์ธต<br/>๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” + ๋ฌด๊ฒฐ์„ฑ]
        B --> C[TCP ์ „์†ก ๊ณ„์ธต<br/>์•ˆ์ •์  ๋ฐ์ดํ„ฐ ์ „๋‹ฌ]
        C --> D[IP ๋„คํŠธ์›Œํฌ ๊ณ„์ธต<br/>ํŒจํ‚ท ๋ผ์šฐํŒ…]
    end

    style A fill:#FFB3B3
    style B fill:#90EE90
    style C fill:#87CEEB
    style D fill:#FFD700
Mermaid
๋ณต์‚ฌ
๊ณ„์ธต
ํ”„๋กœํ† ์ฝœ
์—ญํ• 
์‘์šฉ ๊ณ„์ธต
HTTP
์›น ํŽ˜์ด์ง€ ์š”์ฒญ/์‘๋‹ต ๋‚ด์šฉ
๋ณด์•ˆ ๊ณ„์ธต
TLS (SSL)
๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”, ์ธ์ฆ, ๋ฌด๊ฒฐ์„ฑ
์ „์†ก ๊ณ„์ธต
TCP
์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์žฅ
๋„คํŠธ์›Œํฌ ๊ณ„์ธต
IP
ํŒจํ‚ท์„ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ „๋‹ฌ

Nginx HTTPS ๊ธฐ๋ณธ ์„ค์ •

server { listen 443 ssl; server_name example.com; # SSL ์ธ์ฆ์„œ ๊ฒฝ๋กœ ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ๊ถŒ์žฅ TLS ์„ค์ • ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; root /var/www/html; index index.html; } # HTTP โ†’ HTTPS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (ํ•„์ˆ˜!) server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
Plain Text
๋ณต์‚ฌ
HTTP(80 ํฌํŠธ)๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ HTTPS(443 ํฌํŠธ)๋กœ ์ž๋™ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•ด์ฃผ๋Š” ์„ค์ •์€ ๊ฑฐ์˜ ํ•„์ˆ˜์˜ˆ์š”! ์‚ฌ์šฉ์ž๊ฐ€ http://๋กœ ์ ‘์†ํ•ด๋„ ์ž๋™์œผ๋กœ https://๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•ด์ฃผ๊ฑฐ๋“ ์š”.

ํ•ต์‹ฌ ์ •๋ฆฌ

HTTPS = HTTP + SSL/TLS ์•”ํ˜ธํ™” (ํฌํŠธ 443)
TLS Handshake: ์ธ์ฆ์„œ ํ™•์ธ โ†’ ํ‚ค ๊ตํ™˜ โ†’ ์•”ํ˜ธํ™” ํ†ต์‹  ์‹œ์ž‘
ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•”ํ˜ธํ™”: ๋น„๋Œ€์นญํ‚ค๋กœ ๋Œ€์นญํ‚ค๋ฅผ ๊ตํ™˜, ์ดํ›„ ๋Œ€์นญํ‚ค๋กœ ํ†ต์‹ 
ํ•„์ˆ˜์ธ ์ด์œ : ๋ณด์•ˆ, SEO, ๋ธŒ๋ผ์šฐ์ € ๊ฒฝ๊ณ  ๋ฐฉ์ง€, HTTP/2 ์ง€์›
Nginx์—์„œ listen 443 ssl + ์ธ์ฆ์„œ ์„ค์ •์œผ๋กœ ์ ์šฉ