[Node.js] https 서버 적용기

아기코린이·2022년 9월 5일
0

Nodejs 서버개발기

목록 보기
1/1
post-thumbnail

도메인 발급

SSL 인증서를 발글 받기 위해서는 도메인을 발급 받아야 한다. 아래는 이번글에서 사용할 무료 도메인 사이트다.

내도메인.한국

사이트에 접속하면 다음과 같은 화면을 볼 수 있다.

원하는 도메인 주소를 입력하고 등록을 진행한다.

상단 네비게이션 바를 통해 발급받은 도메인 관리 페이지에 접속한다.

아래의 고급설정(DNS) 중 IP연결을 체크하고, 생성한 ec2의 public 주소를 입력한 후 저장한다.

SSL 인증서 발급

Let’s Encrypt

SSL 인증서 발급 기관중 하나인 Let’s Encrypt에서 인증서를 발급 받을 것이다. 많고 많은 인증기관 중 Let’s Encrypt를 선택한 이유는 간단하다. 무료니까! 아기개발자는 한푼한푼이 소중하다....

인증서의 유효기간은 3개월이다. 유의하도록 하자!

cerbot

Let’s Encrypt에서는 certbot을 사용하여 인증서를 발급받는 것을 권장한다.

https://letsencrypt.org/ko/getting-started/

아래와 같은 명령어로 cerbot을 설치하자.

sudo apt update && sudo apt install certbot -y

여기까지 왔다면, 설치는 끝이난다.

cerbot 실행

sudo certbot certonly -d [발급받은 도메인 이름] --manual --preferred-challenges dns

certonly 옵션을 통해 SSL 인증서를 발급받는다.

이번 글에서는 따로 서버를 구성하지 않고 수동으로 인증을 진행할 것이다. 그래서 --manualpreferred-challenges 옵션을 사용한다.

옵션들의 자세한 사항은 아래 링크를 통해 확인 할 수 있다.

https://eff-certbot.readthedocs.io/en/stable/using.html#getting-certificates-and-choosing-plugins

명령어를 실행하면 아래와 같은 화면을 볼 수 있다.

파란색과 빨간색으로 표시된 영역이 필요하다. 도메인 관리 페이지로 돌아가, TXT(SPF)를 체크한다.

수정하기를 눌러 저장한다.

위와 같은 화면을 봤다면 성공이다!

확인 및 적용

발급된 인증서 확인

cd /etc/letsencrypt/live/[발급받은 도메인 이름]

// permison 오류 발생 시
sudo chmod -R 777 /etc/letsencrypt/live/

express에 적용하기

1. 서버 폴더 만들고 세팅하기

mkdir https-server
cd https-server
npm init
npm install express && npm install path && npm install dotenv
vi server.js

2. 서버파일 작성하기

// server.js
const express = require('express')
const fs = require('fs')
const path = require('path');
const HTTPS = require('https');
require("dotenv").config()

const port = process.env.PORT || 443
const app = express()

app.get('/', (req, res) => {
  res.send('Hello World!')
})

try {
  const option = {
    ca: fs.readFileSync('/etc/letsencrypt/live/babydeveloper.kro.kr/fullchain.pem'),
    key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/babydeveloper.kro.kr/privkey.pem'), 'utf8').toString(),
    cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/babydeveloper.kro.kr/cert.pem'), 'utf8').toString(),
  };
  HTTPS.createServer(option, app).listen(port, () => {
    console.log(`[HTTPS] Server is runnig on port ${port}`);
  });
} catch (error) {
  console.log('[HTTPS] HTTPS 오류가 발생하였습니다.');
}

3. 확인하기

https가 적용된 서버를 확인 할 수 있다.

마치며.

과정이 귀찮기는 하지만 어렵지는 않았다. 적용하고 보니 마음이 편하다. 나도 이제 https 서버의 주인이다!

참고한 글

Node.js-쉽게-https-적용-시키는-법
DNS TXT / Let's Encrypt SSL 인증서 발급

profile
아기코린이

0개의 댓글