HTTPS(SSL/TLS)는 HyperText Transfer Protocol Secure의 약자로, 웹 통신을 보안하기 위한 프로토콜이다.
Express에서 HTTPS를 사용하는 것은 애플리케이션의 통신을 암호화하고 보안을 강화하기 위함이다.
HTTP vs. HTTPS
HTTP (HyperText Transfer Protocol)
HTTP는 텍스트 데이터를 주고받는 프로토콜로, 데이터가 암호화되지 않는다. 따라서 민감한 정보를 전송할 때는 보안이 취약하다.
HTTPS (HyperText Transfer Protocol Secure)
HTTPS는 HTTP에 보안 기능을 추가한 프로토콜이다. 데이터는 암호화되어 전송되기 때문에 중간자 공격을 방지하고 데이터의 안전성을 보장한다.
/ 보안
Express로 HTTP 서버를 실행하면 데이터가 평문으로 전송되기 때문에 중간에서 가로채거나 조작될 수 있다. 이는 보안에 취약한 상태다.
Express로 HTTPS 서버를 실행하면 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고 전송한다. 이는 중간에서 데이터를 읽거나 수정하는 것을 막아준다.
/ SSL/TLS 인증서
HTTPS를 사용하려면 SSL/TLS 인증서가 필요하다. 인증서는 서버의 신원을 확인하고 암호화된 통신을 설정하는 데 사용된다.
HTTP 서버를 실행하는 경우 인증서는 필요하지 않는다.
/ 포트 번호
일반적으로 HTTP는 80번 포트를 사용하고 HTTPS는 443번 포트를 사용한다. Express로 서버를 실행할 때 포트를 설정할 수 있으며, HTTPS를 사용하려면 해당 포트를 지정해야 한다.
http vs https 서버실행
Express http
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(port, () => {
console.log(`HTTP Server is running at http://localhost:${port}/`);
});
Express https
Express에서 HTTPS를 구현하려면 SSL/TLS 인증서와 개인 키를 사용하여 HTTPS 서버를 설정해야 한다.
1) SSL/TLS 인증서 및 개인 키 생성
먼저 SSL/TLS 인증서와 개인 키를 생성해야 한다. 이 작업은 일반적으로 SSL/TLS 인증서를 구매하거나, 무료로 제공되는 서비스를 사용하여 얻을 수 있다. 자체 서명된 인증서를 사용해도 되지만, 실제 운영 환경에서는 유효한 CA(인증 기관)에서 서명한 인증서를 사용하는 것이 좋다.
2) Express 애플리케이션에 HTTPS 설정 추가
Express 애플리케이션에서 HTTPS를 설정하려면 SSL/TLS 인증서와 개인 키를 사용하여 HTTPS 서버를 만들어야 한다.
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
const port = 443;
const options = {
key: fs.readFileSync('path/to/private-key.pem'),
cert: fs.readFileSync('path/to/certificate.pem'),
};
app.get('/', (req, res) => {
res.send('Hello, World over HTTPS!');
});
const server = https.createServer(options, app);
server.listen(port, () => {
console.log(`HTTPS Server is running at https://localhost:${port}/`);
});
위 코드에서 'path/to/private-key.pem', 'path/to/certificate.pem'은 각각 개인 키, SSL/TLS 인증서 경로를 나타낸다. 각 파일의 실제 경로를 사용하도록 변경해야 한다.
'STUDY > ExpressJS' 카테고리의 다른 글
[3-3] 요청과 응답(req, res) methods (0) | 2023.12.22 |
---|---|
[7-1] 사용자 인증을 위한 passportjs (0) | 2023.12.08 |
[4-2] Express에서 정적 파일들을 제공하기 위한 미들웨어 - static (0) | 2023.05.24 |
[7-3] Express.js HTTP 보안강화 미들웨어 - helmet (0) | 2023.04.11 |
[5-3] Express.js 라우터 모듈화 (0) | 2023.04.05 |