์ค์ตํ๋ฉด์ Hash์ ๋ํ ๋ด์ฉ์ ๋ง์ด ๋ค์์ง๋ง ๊ณต๊ฐํค์ ๋น๊ณต๊ฐํค์ ๋ํด์ ์กฐ๊ธ ๋ชจํธํ ๋ถ๋ถ์ด ์๋ค. ํค๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ key.pem
, cert.pem
ํ์ผ์ด ์์ฑ๋๊ณ ๋๋ ์ฃผ๋ ๋ถ๋ถ๋ ์กฐ๊ธ ์ด์ํ๋ค. ์ด ๋ถ๋ถ์ ์ค์ ์ผ๋ก ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
๋์นญํค ์ํธํ ๋ฐฉ์์ ์๋ณตํธํ์ ์ฌ์ฉํ๋ ํค๊ฐ ๋์ผํ ์ํธํ ๋ฐฉ์์ ๋งํ๋ค.
๊ณต๊ฐํค ์ํธํ ๋ฐฉ์์ ์๋ณตํธํ์ ์ฌ์ฉํ๋ ํค๊ฐ ์๋ก ๋ค๋ฅด๋ฉฐ ๋ฐ๋ผ์ ๋น๋์นญํค ์ํธํ๋ผ๊ณ ๋ ํ๋ค. ๋ฐ๋ผ์ ๊ณต๊ฐํค ์ํธํ ์์๋ ์ก์์ ์ ๋ชจ๋ ํ์์ ํค(๊ฐ์ธํค, ๊ณต๊ฐํค)๋ฅผ ๊ฐ๊ณ ์๊ฒ ๋๋ค.
๊ตฌ๋ถ | ๋์นญํค | ๋น ๋์นญํค |
---|---|---|
ํค ๊ด๊ณ | ์ํธํํค = ๋ณตํธํํค | ์ํธํํค โ ๋ณตํธํํค |
ํค ์ ์ก | ๋น๋ฐํค ์ ์ก ํ์ | ๋น๋ฐํค ์ ์ก ๋ถํ์ |
ํค ๊ฐฏ์ | n(n-1)/2 | 2n |
์ฅ์ | ๊ณ ์, ๊ฒฝ์ ์ฑ ๋์ | ํค ๋ถ๋ฐฐ ๋ฐ ๊ด๋ฆฌ์ฉ์ด |
๋จ์ | ํค ๋ถ๋ฐฐ ๋ฐ ๊ด๋ฆฌ๋ถํธ | ์ ์, ๊ฒฝ์ ์ฑ ๋ฎ์ |
TLS๋ฅผ ์ฌ์ฉํด ์ํธํ๋ ์ฐ๊ฒฐ์ ํ๋ HTTP๋ฅผ HTTPS(HTTP Secure)๋ผ๊ณ ํ๋ค. ์น์ฌ์ดํธ ์ฃผ์ ์ญ์
http://
๊ฐ ์๋https://
๋ก ์์๋๋ค. ๊ธฐ๋ณธ ํฌํธ๋ 80๋ฒ์ด ์๋ 443๋ฒ์ ์ด๋ค.
๋น๋์นญํค๋ก ์ด๊ธฐ ํต์ ๋ณด์์ ํ์ธํ๋ค.
์์์ ํค(pre master secret)๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ดํ ๋์นญํค๋ก ํต์ ํ๋ค.
์๋ฒ์์ ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด์ ๋ชจ๋์ ํตํด HTTPS๋ฅผ ๋์ฐ๋ฉด ์ดํ๋ถํฐ๋ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋์์ ์์์ ์งํํด์ค๋ค.
mkcert
๋ชจ๋๋ก ์์ฒด ์ธ์ฆ์๋ฅผ ๋ง๋ค ์ ์๋ค.
// macOS ์ฌ์ฉ์์ ๊ฒฝ์ฐ, Homebrew๋ฅผ ํตํด mkcert๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
$ brew install mkcert
// ๋จผ์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ก์ปฌ์ ์ธ์ฆ๋ ๋ฐ๊ธ๊ธฐ๊ด์ผ๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
$ mkcert -install
// ๋ค์์ ๋ก์ปฌ ํ๊ฒฝ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
// localhost๋ก ๋ํ๋๋ ๋ก์ปฌ ํ๊ฒฝ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ผ ํฉ๋๋ค.
$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
cert.pem ํ์ผ์ ์ธ์ฆ์์ ๊ณต๊ฐํค๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
์๋ ๋ช
๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
$ openssl x509 -in ./cert.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: .......
Signature Algorithm: sha256WithRSAEncryption
...
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:dc:b5:15:70:1f:e8:98:69:9b:7c:92:5f:46:99:
c1:fb:0d:5c:c0:62:35:46:51:49:df:ce:25:3b:cb:
...
-----BEGIN CERTIFICATE-----
MIIElDCCAvygAwIBAgIQA1SODLu5nU4/A5r3hRDQcjANBgkqhkiG9w0BAQsFADCB
qTEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMT8wPQYDVQQLDDZzZXVu
...
cert ํ์ผ์ ๊ณต๊ฐ๋์ด๋ ์๊ด ์์ง๋ง key ํ์ผ์ ๊ณต๊ฐํด์ ์๋๋ค.
key ํ์ผ์ .gitignore
ํ์ผ์ ์ถ๊ฐํ์ฌ ๊ณต๊ฐํ์ง ์๋๋ก ํ๋ค. ํ์ผ๋ช
๋ง ์ ์ด๋๋ฉด ์ต์๋จ๋ถํฐ ์ตํ์ ๋๋ ํ ๋ฆฌ๊น์ง ๋ชจ๋ ์ ์ฉ๋๋ค.
node_modules
.env
*.pem
localhost*
*package-lock.json
const fs = require('fs');
const express = require('express');
// ์๋ฒ ์์ฑ
const app = express();
const https = require('https');
// https.createServer ๋ฉ์๋์ ๋๋ฒ์งธ ์ธ์๋ก app์ด ๋ค์ด๊ฐ๋ค.
const server = https
.createServer(
{
key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
},
app
)
.listen(4000);
module.exports = server;
https://opentutorials.org/course/228/4894
https://wayhome25.github.io/cs/2018/03/11/ssl-https/