HTTPS 란?
데이터가 암호화 되지 않는 HTTP의 단점을 극복하고자 HTTP에 SSL이라는 기술 적용한 것
SSL(Secure Sockets Layer)은 암호화 통신과 그 암호화 통신에 사용되는 키를 공유할 수 있도록 하는 기술
SSL 인증서를 무료로 발급해주는 Let’s Encrypt를 사용할 계획입니다.
Let’s Encyrpt는 Certbot 사용을 권장하고 있습니다.
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
sudo certbot certonly --manual -d '*.{myurl}' -d {myurl} --preferred-challenges dns
❗️ 인증서 발급 중 위와 같은 메세지가 나온다면 엔터를 누르지말고 DNS TXT 등록이 필요합니다!
위와 같이 DNS 설정 완료 후 설정 시간을 조금 기다린 후 엔터를 눌러 진행합니다.
정상적으로 발급이 완료 되었다면 위 경로에 인증서가 생성 됩니다.
Nginx 설정을 아래와 같이 수정합니다.
이름, 인증서 경로, 주소등을 본인 프로젝트에 맞게 입력합니다.
const fs = require('fs');
const HTTPS = require('https');
const port = 3001;
// 운영 환경일때만 적용
if(process.env.NODE_ENV == "production"){
try {
const option = {
ca: fs.readFileSync('/etc/letsencrypt/live/{myurl}/fullchain.pem'),
key: fs.readFileSync('/etc/letsencrypt/live/{myurl}/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/{myurl}/cert.pem')
};
HTTPS.createServer(option, app).listen(port, () => {
console.log('HTTPS 서버가 실행되었습니다. 포트 :: ' + port);
});
} catch (error) {
console.log('HTTPS 서버가 실행되지 않습니다.');
console.log(error);
}
}else{
app.listen(port, () => {
console.log('HTTP 서버가 실행되었습니다. 포트 :: ' + port);
});
}
# 갱신 테스트
sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start" --dry-run
# 갱신
sudo certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"