[SSL] Nginx에 https 적용하기(+ Node.js Express)

Dae-Hee·2021년 11월 4일
1
post-thumbnail

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 설정 완료 후 설정 시간을 조금 기다린 후 엔터를 눌러 진행합니다.

  • /etc/letsencrypt/live/{myurl.com}/fullchain.pem
  • /etc/letsencrypt/live/{myurl.com}/privkey.pem

정상적으로 발급이 완료 되었다면 위 경로에 인증서가 생성 됩니다.



🎯 Front(Nginx) 인증서 적용

Nginx 설정을 아래와 같이 수정합니다.

이름, 인증서 경로, 주소등을 본인 프로젝트에 맞게 입력합니다.



🎯 Back(Node) 인증서 적용

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"

0개의 댓글