웹 사이트를 이용하다보면, https에 대해서 흔히 접하게 됩니다. 대충 '무언가 보안이 강화된' 장치인 것은 알겠는데, 정확히 무엇인지는 알 수 없었습니다. 이번 아티클에서 https에 대해서도 간단히 알아보겠습니다.
일단 https 모듈을 사용하게 되면, 웹 서버에 SSL 암호화를 추가하게 됩니다. 우리가 앞서 배운 GET이나 POST 메서드를 사용하면 클라이언트와 서버 간에 데이터가 오고가게 됩니다. 그런데 이 과정에서 누군가 요청을 가로채 정보를 탈취할 수도 있죠. SSL은 이 오고가는 데이터를 암호화 하게 됩니다. 그래서 중간에 유실되더라도 쉽게 내용을 확인할 수 없게 만드는 역할을 합니다. https를 사용하는 사이트에 접속하게 되면, 주소창 왼쪽에 주로 자물쇠 표시 등이 출력되는 것을 확인할 수 있습니다.
예제를 통해서 학습해 보겠지만, 실제로 https 모듈은 아무나 사용할 수 없습니다. 암호화 장치이기 때문에 이를 인증하는 기관이 필요하고, 이 인증서를 특정 기관에서 구입해야 합니다. 무료 발급 기관도 있지만, 도메인도 필요하고 과정이 복잡하므로 다음 기존 작성 예제를 살짝 바꾸어서 내용만 확인하는 수준으로 진행해 보겠습니다.
[server1.js]
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.write('<h1>HELLO WORLD</h1>');
res.end('<h1>HELLO SERVER</h1>');
})
.listen(8080, () => {
console.log('8080포트 대기중...');
});
위 코드를 예제로 수정해 보겠습니다.
[server1-3.js]
const http = require('http');
const fs= require('fs');
http.createServer({
cert: fs.readFileSync('도메인 인증서 경로 입력'),
key: fs.readFileSync('도메인 비밀 키 경로 입력'),
ca: [
fs.readFileSync('상위 인증서 경로'),
fs.readFileSync('상위 인증서 경로'),
],
}, (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
res.write('<h1>HELLO WORLD</h1>');
res.end('<h1>HELLO SERVER</h1>');
})
.listen(443, () => {
console.log('443포트 대기중...');
});
달라진 점을 찾아볼까요? 우선 createServer 메서드에서 받는 인수가 두 개가 됩니다. 두 번째 인수는 우리가 사용하던 서버 로직을 그대로 사용합니다. 다만 첫 번째 인수는 인증서와 관련된 옵션 객체를 작성하게 됩니다.
인증서 구입 시 pem, crt, key 확장자를 가진 파일들을 제공받게 됩니다. 이것들을 fs.readFileSync 메서드로 읽은 다음 cert, key, ca 옵션에 알맞게 넣게 됩니다. 실제 서버에서는 80번 포트 대신에 443번 포트를 사용하게 됩니다.
'Programming > Node.js' 카테고리의 다른 글
5. http 모듈로 서버 만들기 (5) - cluster [1/2] (0) | 2024.08.08 |
---|---|
5. http 모듈로 서버 만들기 (4) - https와 http2 [2/2] (0) | 2024.08.07 |
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [7] (0) | 2024.08.01 |
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [6] (0) | 2024.07.31 |
5. http 모듈로 서버 만들기 (3) - 쿠키와 세션의 이해 [5] (0) | 2024.07.29 |