HTTP + Secure
(Hyper Text Transfer Protocol Secure Socket layer)
- HTTP 프로토콜 내용을 암호화
제 3자가 클라이언트-서버 간 통신하는 정보를 훔쳐가지 못하게 하는 것
- 비밀번호같은 중요한 정보를 유출하지 못하게 암호화한다.
클라이언트-서버 간 데이터 주고받을 때 대칭키 사용. (알고리즘 복잡도가 대칭키가 더 낮아서)
하지만 대칭키가 유출되면 데이터 복호화가 가능하게 됨
따라서 HTTPS는 대칭키를 주고 받을 때 비대칭키 방식으로 함.
비대칭키에서는 공개키로 암호화한 정보는 개인의 비밀키가 없으면 복호화못하게 때문이다.
브라우저가 서버의 응답과 함께 인증서를 확인할 수 있음
CA (Certiticate Authority)
TLS or SSL
: 서버와 클라이언트 간 CA를 통해 서버 인증하는 과정 + 데이터 암호화 과정의 프로토콜
- SSL, TSL는 사실상 동일한 규약, SSL이 표준화되어 TLS로 이름이 바뀜
// macOS
brew install mkcert
// firefox를 사용할 경우 필요에 따라 설치해주세요.
brew install nss
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와 cert 저장 경로를 반드시 확인하기.
인증서는 공개키, 그리고 인증기관의 서명을 포함하고 있으므로 공개되어도 상관이 없지만, key.pem의 경우 개인 키이므로 git에 커밋하지 않고, 암호처럼 다루어야 합니다.
// 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);
//express.js 이용
//만약 express.js 를 사용하는 경우, 다음과 같이
//https.createServer의 두 번째 파라미터에 들어갈 callback 함수를 Express 미들웨어 교체하기
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);