환경 

Ubuntu 18.04
Nodejs
Express


1. certbot 을 설치해주자

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

2. 실행

sudo certbot certonly --manual

3. 이메일 입력

처음 실행시키면 이메일 입력하라는 커맨드가 나올 것이다. 입력해주면 된다!
도메인 입력하라고 뜨기 전까지 Y.

4. 인증서를 발급할 도메인 주소 입력

http & https 빼고 그냥 도메인만 입력하자.

5. Y 입력하고 엔터!

 

6. 중요! 여기서 일단 멈춘다.

사진에서 a-string과 a-challenge내용은 다른 문자열이 적혀있을 것이다.
그냥 a-string과 a-challenge이라 부르겠다.

http://도메인/.well-known/acme-challenge/a-string 라는 내용이 보일 것이다.
저 주소로 요청을 보내어 인증서를 발급 할지 말지 인증을 하는 과정을 거치는 것 같았다. 
그래서 우리는 접속 경로를 만들어 줘야한다.

7. 경로 폴더 & 파일 생성

프로젝트파일 root
ㄴ public
  ㄴ .well-known
    ㄴ acme-challenge
      ㄴ 위 이미지 속 a-string 부분 복사해서 파일 이름으로 생성

8. 새로 생성한 a-string파일 내용으로 위 이미지의 a-challenge 라고 적힌 부분의 내용을 입력해주고 저장하자. 

9. 그리고 기다리고 있었던 콘솔창 엔터!

그럼 위 사진과 같이 인증서가 발급 된 것을 알 수 있다.

sudo cd /etc/letsencrypt/live/도메인

위 경로로 들어가면 pem 파일이 있을 것이다.

10. app.js 파일에 붙여 넣어서 제대로 https로 접근이 가능한지 확인해보자!

/* app.js */

// Dependencies
const fs = require('fs');
const http = require('http');
const https = require('https');
const express = require('express');

const app = express();

// Certificate 인증서 경로
const privateKey = fs.readFileSync('/etc/letsencrypt/live/도메인 입력/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/도메인 입력/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/도메인 입력/chain.pem', 'utf8');

const credentials = {
	key: privateKey,
	cert: certificate,
	ca: ca
};

app.use((req, res) => {
	res.send('Hello there !');
});

// Starting both http & https servers
const httpServer = http.createServer(app);
const httpsServer = https.createServer(credentials, app);

httpServer.listen(80, () => {
	console.log('HTTP Server running on port 80');
});

httpsServer.listen(443, () => {
	console.log('HTTPS Server running on port 443');
});
sudo node app.js

 

아래 이미지와 같이 인증서가 유효하게 뜨는 것을 볼 수 있다.

 

출처
https://itnext.io/node-express-letsencrypt-generate-a-free-ssl-certificate-and-run-an-https-server-in-5-minutes-a730fbe528ca

'Develop > Node.js' 카테고리의 다른 글

PM2 80, 443포트 사용  (0) 2020.06.20
[Nodejs] Multer - Formdata 전송  (0) 2020.05.25
[Nodejs] Sequelize - 설치 & 마이그레이션  (0) 2020.05.18

+ Recent posts