HTTP/HTTPS
π HTTP
HTTP
- ν΄λΌμ΄μΈνΈ μλ² κ΅¬μ‘°
- Request Response ꡬ쑰
- 무μν νλ‘ν μ½(Stateless)
- λ‘κ·ΈμΈμ΄ νμ μλ λ¨μν μλΉμ€ μκ° νλ©΄ κ°μ κ²½μ°,,
- μ₯μ : μλ² νμ₯μ± λμ(μ€μΌμΌ μμ)→(μλ΅ μλ²λ₯Ό μ½κ² λ°κΏ μ μμ΄ λ¬΄νν μλ² μ¦μ€ κ°λ₯)
- λ¨μ : ν΄λΌμ΄μΈνΈκ° μΆκ° λ°μ΄ν° μ μ‘
- λΉμ°κ²°μ±(Connectionless)
- μμ²μ μ£Όκ³ λ°μ λλ§ μ°κ²°μ μ μ§νκ³ μλ΅μ μ£Όκ³ λλ©΄ TCP/IP μ°κ²°μ λλλ€
- λ°λΌμ μ΅μν μμμΌλ‘ μλ²μ μ§ κ°λ₯
- HTTP λ©μΈμ§
- λ¨μν¨, νμ₯ κ°λ₯
π HTTPS (HTTP Secure)
μνΈν λ°©μ
λ°μ΄ν°λ₯Ό μνΈνλ₯Ό ν λμλ μνΈνν λ μ¬μ©ν ν€, μνΈνν κ²μ ν΄μ(볡νΈν)ν λ μ¬μ©ν ν€κ° νμν©λλ€.
μ΄ λ μνΈνμ 볡νΈνν λ μ¬μ©νλ ν€κ° λμΌνλ€λ©΄ λμΉ ν€ μνΈν λ°©μ,
λ€λ₯΄λ€λ©΄ κ³΅κ° ν€(λΉλμΉ ν€) μνΈν λ°©μμ΄λΌκ³ ν©λλ€.
1. λμΉ ν€ μνΈν λ°©μ
λμΉ ν€ μνΈν λ°©μμ νλμ ν€λ§ μ¬μ©ν©λλ€. μνΈνν λ μ¬μ©ν ν€λ‘λ§ λ³΅νΈνκ° κ°λ₯ν©λλ€.
λ κ°μ ν€λ₯Ό μ¬μ©ν΄μΌνλ κ³΅κ° ν€ λ°©μμ λΉν΄μ μ°μ° μλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μμ΅λλ€.
νμ§λ§ ν€λ₯Ό μ£Όκ³ λ°λ κ³Όμ μμ νμ·¨ λΉνμ κ²½μ°μλ μνΈνκ° μμ©μμ΄μ§κΈ° λλ¬Έμ ν€λ₯Ό κ΄λ¦¬νλλ° μ κ²½μ λ§μ΄ μ¨μΌ ν©λλ€.
2. κ³΅κ° ν€(λΉλμΉ ν€) μνΈν λ°©μ
λΉλμΉ ν€ μνΈν λ°©μμ λ κ°μ ν€λ₯Ό μ¬μ©ν©λλ€. μνΈνν λ μ¬μ©ν ν€μ λ€λ₯Έ ν€λ‘λ§ λ³΅νΈνκ° κ°λ₯ν©λλ€.
μ¬κΈ°μ λ κ°μ ν€λ₯Ό κ°κ° κ³΅κ° ν€, λΉλ° ν€ λΌκ³ λΆλ¦ λλ€.
μ¬κΈ°μ κ³΅κ° ν€λ μ΄λ¦ κ·Έλλ‘ κ³΅κ°λμ΄ μκΈ° λλ¬Έμ λꡬλ μ§ μ κ·Ό κ°λ₯ν©λλ€.
λꡬλ μ΄ κ³΅κ° ν€λ₯Ό μ¬μ©ν΄μ μνΈνν λ°μ΄ν°λ₯Ό 보λ΄λ©΄, λΉλ° ν€λ₯Ό κ°μ§ μ¬λλ§ κ·Έ λ΄μ©μ 볡νΈνν μ μμ΅λλ€.
λ³΄ν΅ μμ²μ 보λ΄λ μ¬μ©μκ° κ³΅κ° ν€λ₯Ό, μμ²μ λ°λ μλ²κ° λΉλ° ν€λ₯Ό κ°μ§λλ€. μ΄ λ, λΉλ° ν€λ μλ²κ° ν΄νΉλΉνλ κ² μλ μ΄μ νμ·¨λμ§ μμ΅λλ€.
μ΄λ¬ν κ³΅κ° ν€ λ°©μμ κ³΅κ° ν€λ₯Ό μ¬μ©ν΄ μνΈνν λ°μ΄ν°κ° νμ·¨ λΉνλ€κ³ νλλΌλ, λΉλ° ν€κ° μλ€λ©΄ 볡νΈνν μ μμΌλ―λ‘ λμΉ ν€ λ°©μλ³΄λ€ λ³΄μμ±μ΄ λ μ’μ΅λλ€.
νμ§λ§ λμΉ ν€ λ°©μ λ³΄λ€ λ 볡μ‘ν μ°μ°μ΄ νμνμ¬ λ λ§μ μκ°μ μλͺ¨νλ€λ λ¨μ μ΄ μμ΅λλ€.
SSL/TLS νλ‘ν μ½
HTTPSλ HTTP ν΅μ μ νλ μμΌ λΆλΆμμ SSL νΉμ TLSλΌλ νλ‘ν μ½μ μ¬μ©νμ¬ μλ² μΈμ¦κ³Ό λ°μ΄ν° μνΈνλ₯Ό μ§νν©λλ€.
μ¬κΈ°μ SSLμ΄ νμ€νλλ©° λ°λ μ΄λ¦μ΄ TLSμ΄λ―λ‘ κ°μ μ¬μ€μ κ°μ νλ‘ν μ½μ΄λΌκ³ μκ°νμλ©΄ λ©λλ€.
SSL/TLSλ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§λλ€.
- CAλ₯Ό ν΅ν μΈμ¦μ μ¬μ©
- λμΉ ν€, κ³΅κ° ν€ μνΈν λ°©μμ λͺ¨λ μ¬μ©
μΈμ¦μμ CA(Certificate Authority)
HTTPSλ₯Ό μ¬μ©νλ©΄ λΈλΌμ°μ κ° μλ²μ μλ΅κ³Ό ν¨κ» μ λ¬λ μΈμ¦μλ₯Ό νμΈν μ μμ΅λλ€.
μ΄λ¬ν μΈμ¦μλ μλ²μ μ μμ 보μ¦ν΄μ€λλ€.
μ΄λ μΈμ¦μλ₯Ό λ°κΈν΄μ£Όλ 곡μΈλ κΈ°κ΄λ€μ Certificate Authority, CAλΌκ³ λΆλ¦ λλ€.
1. μλ²λ μΈμ¦μλ₯Ό λ°κΈλ°κΈ° μν΄μ CAλ‘ μλ²μ μ 보μ κ³΅κ° ν€λ₯Ό μ λ¬ν©λλ€.
2. CAλ μλ²μ κ³΅κ° ν€μ μ 보λ₯Ό CAμ λΉλ° ν€λ‘ μνΈννμ¬ μΈμ¦μλ₯Ό λ°κΈν©λλ€.
3. μλ²λ ν΄λΌμ΄μΈνΈμκ² μμ²μ λ°μΌλ©΄ CAμκ² λ°κΈλ°μ μΈμ¦μλ₯Ό 보λ΄μ€λλ€.
4. μ΄ λ, μ¬μ©μκ° μ¬μ©νλ λΈλΌμ°μ λ CAλ€μ 리μ€νΈμ κ³΅κ° ν€λ₯Ό λ΄μ₯νκ³ μμ΅λλ€.
5. μ°μ ν΄λΉ μΈμ¦μκ° λ¦¬μ€νΈμ μλ CAκ° λ°κΈν μΈμ¦μμΈμ§ νμΈνκ³ , 리μ€νΈμ μλ CAλΌλ©΄ ν΄λΉνλ CAμ κ³΅κ° ν€λ₯Ό μ¬μ©ν΄μ μΈμ¦ μμ 볡νΈνλ₯Ό μλν©λλ€.
6. CAμ λΉλ° ν€λ‘ μνΈνλ λ°μ΄ν°(μΈμ¦μ)λ CAμ κ³΅κ° ν€λ‘λ§ λ³΅νΈνκ° κ°λ₯νλ―λ‘, μ λ§λ‘ CAμμ λ°κΈν μΈμ¦μκ° λ§λ€λ©΄ 볡νΈνκ° μ±κ³΅μ μΌλ‘ μ§νλμ΄μΌ ν©λλ€.
- 볡νΈνκ° μ±κ³΅μ μΌλ‘ μ§ν λλ€λ©΄, ν΄λΌμ΄μΈνΈλ μλ²μ μ 보μ κ³΅κ° ν€λ₯Ό μ»κ² λ¨κ³Ό λμμ ν΄λΉ μλ²κ° μ λ’°ν μ μλ μλ²μμ μ μ μκ² λ©λλ€.
- 볡νΈνκ° μ€ν¨νλ€λ©΄, μ΄λ μλ²κ° 보λ΄μ€ μΈμ¦μκ° μ λ’°ν μ μλ μΈμ¦μμμ νμΈνκ² λ©λλ€.
μ 리νμλ©΄, μ΄λ κ² μλ²μ ν΄λΌμ΄μΈνΈκ°μ CAλ₯Ό ν΅ν΄ μλ²λ₯Ό μΈμ¦νλ κ³Όμ κ³Ό λ°μ΄ν°λ₯Ό μνΈννλ κ³Όμ μ μμ°λ₯Έ νλ‘ν μ½μ SSL λλ TLSμ΄λΌκ³ λ§νκ³ , HTTPμ SSL/TLS νλ‘ν μ½μ λν κ²μ HTTPSλΌκ³ ν©λλ€.
HTTPS μ¬μ€ μΈμ¦μ λ°κΈ λ° μλ² κ΅¬ν
Homebrewλ₯Ό ν΅ν΄ μ€μΉ(macOS)
brew install mkcert
μΈμ¦μ μμ±
- λ‘컬μ μΈμ¦λ λ°κΈκΈ°κ΄μΌλ‘ μΆκ°
mkcert -install
//λΉλ² -> μ»΄ν¨ν° λΉλ²
⇒
- λ‘컬νκ²½μ λν μΈμ¦μ λ§λ€κΈ° → μλ λͺ λ Ήμ΄ μ λ ₯
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
localhost, 127.0.0.1(IPv4), ::1(IPv6)μμ μ¬μ©ν μ μλ μΈμ¦μcert.pem, key.pemμ΄λΌλ νμΌμ΄ μμ±λμλ€.
β οΈ key.pemμ κ°μΈν€λΌμ. gitμ 컀λ°νμ§λ§κ³ , μνΈμ²λΌ λ€λ£¨μ΄μΌνλ€.
HTTPS μλ² μμ±
node.js νκ²½μμ https λ΄μ₯ λͺ¨λμ μ΄μ©ν΄μ μμ± κ°λ₯νλ€.
express.jsλ₯Ό ν΅ν΄μ λ§λ€μλ μλ€.
λ°©κΈ μμ±ν μΈμ¦μ νμΌλ€μ HTTPS μλ²μ μ μ©ν΄μ£Όλ μμ μ΄ μ νλμ΄μΌνλ€.
__dirnameμ νμ¬ μ€ν μ€μΈ νμΌ κ²½λ‘λ₯Ό λ§νλ κ²μΌλ‘, μ λκ²½λ‘λ₯Ό λ£μ΄μ£Όλ©΄ λλ€.
λ‘컬μ μΈμ¦λ λ°κΈκΈ°κ΄μΌλ‘ λ±λ‘μ΄ λμ΄μκ³ , μΈμ¦μλ μλ²μ κ°μ κ²½λ‘μ μμ΄μΌ νλ€.
Node.js https λͺ¨λ μ΄μ©
const https = require('https');
const fs = require('fs');
https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
function (req, res) {
res.write('Congrats! You made https server now :)');
res.end();
}
)
.listen(3001);
μ΄μ μλ²λ₯Ό μ€νν ν https://localhost:3001λ‘ μ μνλ©΄ λΈλΌμ°μ μ url μ°½ μΌμͺ½μ μλ¬Όμ κ° μ 겨μλ HTTPSνλ‘ν μ½μ μ΄μ©νλ€λ κ²μ μ μ μλ€!
console.log(req.body);
console.log(userInfo);
express.js μ΄μ©
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
app.use('/', (req, res) => {
res.send('Congrats! You made https server now :)');
})
)
.listen(3001);
λ§μ½ express.js λ₯Ό μ¬μ©νλ κ²½μ°,
λ€μκ³Ό κ°μ΄ https.createServerμ λ λ²μ§Έ νλΌλ―Έν°μ λ€μ΄κ° callback ν¨μλ₯Ό Express λ―Έλ€μ¨μ΄λ‘ κ΅μ²΄!
ngrokμΌλ‘ ν°λλ§λ κ°λ₯νλ€.
HTTPλ‘ λ§λ€μ΄μ§ μλ²λ₯Ό HTTPS νλ‘ν μ½λ‘ ν°λλ§ ν΄μ£Όλ νλ‘κ·Έλ¨μ΄λΌκ³ ν¨!
ngrok - Online in One Line
Zero Trust Add SSO, Mutual TLS, IP Policy, and webhook signature verification.
ngrok.com