SSL 인증서를 발글 받기 위해서는 도메인을 발급 받아야 한다. 아래는 이번글에서 사용할 무료 도메인 사이트다.
사이트에 접속하면 다음과 같은 화면을 볼 수 있다.
원하는 도메인 주소를 입력하고 등록을 진행한다.
상단 네비게이션 바를 통해 발급받은 도메인 관리 페이지에 접속한다.
아래의 고급설정(DNS) 중 IP연결을 체크하고, 생성한 ec2의 public 주소를 입력한 후 저장한다.
SSL 인증서 발급 기관중 하나인 Let’s Encrypt에서 인증서를 발급 받을 것이다. 많고 많은 인증기관 중 Let’s Encrypt를 선택한 이유는 간단하다. 무료니까! 아기개발자는 한푼한푼이 소중하다....
인증서의 유효기간은 3개월이다. 유의하도록 하자!
Let’s Encrypt에서는 certbot을 사용하여 인증서를 발급받는 것을 권장한다.
아래와 같은 명령어로 cerbot을 설치하자.
sudo apt update && sudo apt install certbot -y
여기까지 왔다면, 설치는 끝이난다.
sudo certbot certonly -d [발급받은 도메인 이름] --manual --preferred-challenges dns
certonly
옵션을 통해 SSL 인증서를 발급받는다.
이번 글에서는 따로 서버를 구성하지 않고 수동으로 인증을 진행할 것이다. 그래서 --manual
과 preferred-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/
mkdir https-server
cd https-server
npm init
npm install express && npm install path && npm install dotenv
vi server.js
// 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 오류가 발생하였습니다.');
}
https가 적용된 서버를 확인 할 수 있다.
과정이 귀찮기는 하지만 어렵지는 않았다. 적용하고 보니 마음이 편하다. 나도 이제 https 서버의 주인이다!
Node.js-쉽게-https-적용-시키는-법
DNS TXT / Let's Encrypt SSL 인증서 발급