Node.js 쉽게 https 적용 시키는 법

오해성·2020년 3월 14일
7

기술 상점

목록 보기
3/10

이 글은 aws ubuntu에 서버를 업로드 시킨 후 도메인 등록 까지 해놨다는 가정 하에 작성 된 글입니다.
https를 서버에 적용시키기 위해서는 우선 https 인증서가 필요합니다. 구글링 결과 다양한 인증서 발급 사이트가 있었지만 그 중에서 꽤 인지도가 있는 편인 letsencrypt를 이용해서 발급/적용 시켜 보겠습니다.

1. python설치

git이 설치 되있지 않았다면 설치하고 다음 명령어를 실행 시켜준다.
sudo apt-get install git python2.7

letsencrypt에서는 python2.7버전을 선호한다.

2. Root권한이 있는 폴더로 이동한다.

ubuntu의 경우 /ubuntu/home 경로이다.

3. 다음 경로에 letsencrypt 깃을 클론시켜준다

sudo git clone https://github.com/letsencrypt/letsencrypt

4. python코드 실행

cd letsencrypt

실행 시킨후 (현재 경로 /home/ubuntu/letsencrypt)

./letsencrypt-auto certonly

다음 명령어를 실행 시켜준다.
letsencrypt는 기본적으로 유효기간이 3달(90일)이지만 certbot 이란 프로그램이 자동으로 기간을 갱신해준다. 하지만 이는 apache, ngix만 성공적으로 지원 해주기 때문에 이를 대신해줄 npm 프로그램을 설치해 적용 시켜줘야 한다. (이 내용은 다음에 작성하기로..)

5. 다음 내용 따라오기


위에 명령어를 실행시키고 나면 다음과 같은 문구가 뜬가 나의 경우 2번을 선택했다.

약관 동의를 해준다. A

연락을 받을 수 있는 이메일을 적어준다.

내가 등록 해놓은 도메인을 입력해준다. letsencrypt의 도메인 하나 만을 지원한다. (서브 도메인을 사용할 시 또 다시 등록 해줘야 한다.)


위와 같이 뜬다면 성공이다.

6. node.js 적용 시키기

express를 예로 적용 시켜 보겠다.


const express = require('express');
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');

const app = express();


try {
  const option = {
    ca: fs.readFileSync('/etc/letsencrypt/live/등록 시킨 도메인 이름/fullchain.pem'),
    key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/등록 시킨 도메인 이름/privkey.pem'), 'utf8').toString(),
    cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/등록 시킨 도메인 이름/cert.pem'), 'utf8').toString(),
  };

  HTTPS.createServer(option, app).listen(sslport, () => {
    colorConsole.success(`[HTTPS] Soda Server is started on port ${colors.cyan(sslport)}`);
  });
} catch (error) {
  colorConsole.error('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
  colorConsole.warn(error);
}

다음 과 같이 실행 시킨후 "https://내가 등록 시킨 도메인:포트번호" 과 같이 서버에 접근하면 동작하는 것을 확인할 수 있다.

앞서 말했듯이 letsencrypt은 기본 유효 기간이 90일이며 해당 기간이 끝나갈 경우 새로 갱신 해줘야 합니다. node.js(express)에는 auto-sni, greenlock-express 등이 있으나 이에 대한 내용은 다음에 다루도록 하겠습니다.

이 글은 제가 나중에 다시 이 작업을 할 때를 대비하여 제가 볼 수 있도록 작성한 참고 자료입니다. 때문에 제가 보기 편한대로 작성한 부분이 많으니 어디까지나 참고용으로 보시기 바랍니다.

+이 글을 쓰며 참고한 블로그
https://medium.com/@sejongdekang/node-js%EC%97%90%EC%84%9C-lets-encrypt-%EB%AC%B4%EB%A3%8C-ssl-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-fe337b87bfbb

0개의 댓글