HTTPS ํบ์๋ณด๊ธฐ
๊ด๋ จ ํฌ์คํธ
https://blog.naver.com/sssang97/223116073073
์ด๋ฒ์๋ HTTPS ์๋ฒ๋ฅผ ์ง์ ๋์๋ณด๊ณ , ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณธ๋ค.
HTTPS๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTTP์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ณด์ํ๊ณ ์ ์๊ฒจ๋ ํ๋กํ ์ฝ์ธ๋ฐ,
์ด๋ ๊ฒ ์์ ํ๋ค๊ณ ๋จ๋ฉด HTTPS๊ฐ ์ ์ ์ฉ๋ ๊ฒ์ด๋ค.
HTTP์ ๋ฌธ์
HTTP๋ ์ ๋ง ์ ๋์ํ๊ณ , ์น ์ธ๊ณ๋ฅผ ์ด์ด์ฃผ๋๋ฐ ํฌ๋ํฐ ์ญํ ์ ํด์คฌ์ง๋ง, ์ฌ๋ฌ๋ชจ๋ก ๋จ์ ๋ ๋ง์๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฅ ํฐ ๋ณด์์ทจ์ฝ์ ์ค ํ๋๋ ๋คํธ์ํฌ ํจํท์ด ๊ฐ์ฒญ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฅ ๋ฐ์ดํฐ๊ฐ ํ๋ฌธ์ผ๋ก๋ง ์๋ค๊ฐ๋ค ํ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ์์ ํจํท์ ๊ฐ๋ก์ฑ๋ฉด ๋ฐ๋ก ๋ณผ ์ ์๋ค...
"์ค๋ํ" ๋ฑ์ผ๋ก ๋ํ๋๋ ๋ณด์ ๊ณต๊ฒฉ๋ค์ด ์ด๋ฐ ํ์ ํ ๋ถ๋ถ๋ค์ ๋ ธ๋ฆฐ ๊ฒ์ด๋ค.
TLS (SSL)
HTTPS๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTTP 1.1 ์์ TLS๋ผ๋ ๋ ์ด์ด๋ฅผ ์ถ๊ฐ๋ก ์ฌ๋ฆฐ ํํ๋ก ๋์ํ๋ค.
https://velog.io/@moonyoung/HTTPS%EC%9D%98-%EC%9B%90%EB%A6%AC
TLS๊ฐ ๋ญ๋ ํ๋ฉด, ํ๋ฌธ์ผ๋ก ๋ณด๋ด์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํด์ ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์์๋ฌ์ผ ํ๋ ๋ถ๋ถ์ Private Keyํ๋๋ก ์ํธํ์ ๋ณตํธํ๋ฅผ ์ ๋ถ ์ํํ๋ ๊ฒ ์๋๋ผ๋ ๊ฒ์ด๋ค.
๊ณต๊ฐํค ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋๋ฐ, ์ด๊ฑด ์ํธํํ ๋ ์ฌ์ฉ๋๋ ํค์ ๋ณตํธํํ ๋ ์ฌ์ฉ๋๋ ํค๊ฐ ๋ค๋ฅด๋ค.
์ํธํํ ๋ ์ฌ์ฉ๋๋ ํค๋ฅผ publicKey๋ผ๊ณ ํด์ ๋ชจ๋๊ฐ ์ฌ์ฉํ ์ ์๊ฒ ๊ณต๊ฐํ๊ณ , ๋ณตํธํํ ๋ ์ฌ์ฉ๋๋ ํค๋ฅผ privateKey๋ผ๊ณ ํด์ ํด๋น ์ฌ์ดํธ์ ์ฃผ์ธ๋ง ๊ฐ๊ณ ์๊ฒ ํ๋ค.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ํธํ๋ ํจํท์ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ํ๋ ๊ฒ์ด๋ค.
https://gaeko-security-hack.tistory.com/123
ํ๋ฌธ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ ๊ฐ๋ก์ฑ๋๋ผ๋ ๊ณต๊ฒฉ์๋ ์ด๊ฑธ ์ด๋ป๊ฒ ์จ๋จน์ ์๊ฐ ์๋ค.
CA์ ์ธ์ฆ์
TLS๋ ๊ณต๊ฐํค๋ฅผ ํตํด์ ๋๊ตฌ๋ ์ํธํ๋ฅผ ํ ์ ์๋ค๊ณ ํ์๋ค.
๊ทธ๋ฌ๋ฉด ๊ณต๊ฐํค๋ ๋๊ฐ ๋ค๊ณ ์๊ณ ๋๊ฐ ์ฃผ๋๊ฑธ๊น?
์๋ฌด๋ ์์ด ์ด๊ฑธ ํด์ค ์๋ ์์ผ๋ ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด(Certificate Authority:CA)์ด ๋ฐ๋ก ํ์ํ๋ค.
๋ณดํต์ ๋์ฃผ๊ณ ์จ์ผํ๋๋ฐ, ์์ Cloudflare๋ AWS ๊ฐ์ ๋ฉ์ด์ ํ ๋ฐ๊ธ๊ธฐ๊ด์์๋ ๋๋ฉ์ธ์ ์ฌ๋ฉด ๋ณ๋ ๋น์ฉ์์ด ์ธ์ฆ์๊น์ง ์ ๊ณต์ ํด์ค๋ค.
๋ฏฟ์๋งํ ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด์ ๋ค ์ ํด์ ธ์์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ง๋ค ์ ๋ขฐํ๋ ์ธ์ฆ์ ๋ฐ๊ธ๊ธฐ๊ด์ด ์กฐ๊ธ์ฉ ๋ค๋ฅผ ์ ์๋ค.
๊ทธ๋์ ์ข ๋น์ธ๋๋ผ๋ ๋์ค์ ์ด๊ณ ๋ฏฟ์๋งํ ๋ฐ๊ธ์ฒ๋ฅผ ์ฐ๋๊ฒ ์ข๋ค. ์๊ทธ๋ฌ๋ฉด SSL ์ ๋ถ์ฌ๋๊ณ ๋ ๋ธ๋ผ์ฐ์ ์ ์ํํ๋ค๊ณ ๋ฐ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋์ค์ฝ๋ ์ฌ์ดํธ์ ์ ์ํด๋ณด๋ฉด


์ด๋ ๊ฒ cloudflare๋ฅผ ํตํด์ TLS ์ธ์ฆ์ ํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๊ฒ CA๊ฐ ํด์ฃผ๋ ์ญํ ์ด๋ค.
์ธ์ฆ์ ๋ฐ๊ธ๋ฐ๊ธฐ (Cloudflare)
์ฐ์ ์ธ์ฆ์์ privatekey ์์ด ํ์ํ๋ค.
๋๋ cloudflare๋ฅผ ์ด๋ฏธ ์ฐ๊ณ ์๊ธฐ๋๋ฌธ์, cloudflare๋ก ํด๋ณด๊ฒ ๋ค.

์ ๋นํ ์ด๋ ๊ฒ ๋ฐ๊ธ๋ฐ์์
ํ์ผ๋ก ์ ์ฅํด๋๋ค.

๊ทธ๋ฆฌ๊ณ cloudflare์ฉ ๊ณต์ฉ ์ธ์ฆ์ ์ฒด์ธ์ ๋ ํ์ผ๋ก ์ ์ฅํด๋๋ค.
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIID+rOSdTGfGcwDQYJKoZIhvcNAQELBQAwgYsxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91
ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQH
Ew1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMB4XDTE5MDgyMzIx
MDgwMFoXDTI5MDgxNTE3MDAwMFowgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBD
bG91ZEZsYXJlLCBJbmMuMTQwMgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wg
Q2VydGlmaWNhdGUgQXV0aG9yaXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMw
EQYDVQQIEwpDYWxpZm9ybmlhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAwEiVZ/UoQpHmFsHvk5isBxRehukP8DG9JhFev3WZtG76WoTthvLJFRKFCHXm
V6Z5/66Z4S09mgsUuFwvJzMnE6Ej6yIsYNCb9r9QORa8BdhrkNn6kdTly3mdnykb
OomnwbUfLlExVgNdlP0XoRoeMwbQ4598foiHblO2B/LKuNfJzAMfS7oZe34b+vLB
yrP/1bgCSLdc1AxQc1AC0EsQQhgcyTJNgnG4va1c7ogPlwKyhbDyZ4e59N5lbYPJ
SmXI/cAe3jXj1FBLJZkwnoDKe0v13xeF+nF32smSH0qB7aJX2tBMW4TWtFPmzs5I
lwrFSySWAdwYdgxw180yKU0dvwIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYD
VR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4EFgQUJOhTV118NECHqeuU27rhFnj8KaQw
HwYDVR0jBBgwFoAUJOhTV118NECHqeuU27rhFnj8KaQwDQYJKoZIhvcNAQELBQAD
ggEBAHwOf9Ur1l0Ar5vFE6PNrZWrDfQIMyEfdgSKofCdTckbqXNTiXdgbHs+TWoQ
wAB0pfJDAHJDXOTCWRyTeXOseeOi5Btj5CnEuw3P0oXqdqevM1/+uWp0CM35zgZ8
VD4aITxity0djzE6Qnx3Syzz+ZkoBgTnNum7d9A66/V636x4vTeqbZFBr9erJzgz
hhurjcoacvRNhnjtDRM0dPeiCJ50CP3wEYuvUzDHUaowOsnLCjQIkWbR7Ni6KEIk
MOz2U0OBSif3FTkhCgZWQKOOLo1P42jHC3ssUZAtVNXrCk3fw9/E15k8NPkBazZ6
0iykLhH1trywrKRMVw67F44IE8Y=
-----END CERTIFICATE-----
์ด๊ฑด cloudflare ๋ด์์๋ง ์ ํจํ ์ ์ฉ ์ธ์ฆ์๋ผ์, ๋ธ๋ผ์ฐ์ ์์๋ ๋ฐ์์ฃผ์ง ์๋๋ค.
HTTPS ์ ์ฉํด๋ณด๊ธฐ (Express.js + Cloudflare)
์ ๊ฒ๋ค์ ๊ฐ์ ธ๋ค๊ฐ HTTPS ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ณด์.
์๋๋ ๊ทธ์ ๋ํ ๊ฐ๋จํ ์์ ์ฝ๋๋ค.
const Express = require('express');
const https = require('https');
const fs = require('fs');
var sslOptions = {
ca: fs.readFileSync('chain'),
key: fs.readFileSync('privatekey'),
cert: fs.readFileSync('certificate'),
};
const app = Express()
app.get('/', (req, res)=>{
res.json('OK')
});
app.listen(80, ()=>{
console.log('HTTP Server is running')
})
https.createServer(sslOptions, app, (req, res) => {})
.listen(443, () => {
console.log('HTTPS Server is running')
});
๊ธฐ์กด HTTP ์๋ฒ๋ HTTP ์๋ฒ๋๋ก ๋์ฐ๊ณ , https ๋ชจ๋์ ์ด์ฉํด์ HTTPS ์๋ฒ๋ ๋์ ๋ค.
๊ทธ๋ฆฌ๊ณ cloudflare ๋๋ฉ์ธ ๊ด๋ฆฌ์์ ์ IP๋ก ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ , "ํ๋ก์ฑ" ๋ชจ๋๋ก ํด์ค๋ค.
์ด ๊ฒฝ์ฐ์๋ ํ๋ก์ฑ ๋ชจ๋๋ก ํด์ค์ผ๋ง cloudflare ํธ๋ํฝ์ ํ์ ์ธ์ฆ์ ์ฒด์ธ์ ์ ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์ ๋ ๊ฒ ํด์ ๋ค์ด๊ฐ๋ณด๋ฉด
์ ๋ ๊ฒ์ด๊ณ
์ ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์์๋ ๊ฐ๋จํ ํ
์คํธ๋ฅผ ์ํด์ express์ ์ง์ ๋ถ์์ง๋ง, ์ข์ ํจํด์ ์๋๋ค.
์ค์ ๋ก๋ ๋ก๋๋ฐธ๋ฐ์ ๋ฑ์ ๋ถ์ฌ์ ์ธ ์ผ์ด ๋ ๋ง์ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://www.cryptomathic.com/news-events/blog/encryption-https-attack-on-authentication-in-remote-banking-services-a-russian-perspective
https://community.cloudflare.com/t/https-certificate-not-trusted/3610/11
https://devonperoutky.super.site/blog-posts/mediocre-engineers-guide-to-https