본문 바로가기
Archive

express 서버에 https 적용하기(SSL인증)

by livemehere 2022. 6. 7.

certbot 설치 및 pem 키 생성

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

# 실행
sudo certbot certonly --manual

위 명령어를 실행하면 메뉴얼대로 입력을 해야하는데

잘읽어보고

1. 이메일

2. 적용할 도메인

3. public 파일 생성

 

을 잘 따라하면 성공적으로 생성된다는 메세지가 아래와같이 나온다.

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/입력한도메인/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/입력한도메인/privkey.pem
This certificate expires on 2022-09-05.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.

pem 키 접근 권한 설정

# Change group of all letsencrypt files to 접속한사용자
sudo chgrp -R 접속한사용자 /etc/letsencrypt/* 

# Make sure all directories and files are group readable.
sudo chmod -R g+rx /etc/letsencrypt/*

위 권한 설정을 안해주면 fs 모듈로 파일 읽기에서 permission denied 된다.

 

App.js 수정하기

여기서 중요한 점은 하단에 포트가 80, 443 을 열고있는데,

root 계정이 아니고서야 1024 이하의 포트를 개방할 권한이 없다.

그렇기 때문에 다른 포트로 개방한다음, ubuntu에서 포트포워딩을 통해서 연결해주어야한다.

❗그리고 반드시 잊지 말아야 할 것은 , 인바운드 규칙에서 443포트, 80포트를 개방해야한다.

 

/* 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');
});

 

반응형