NGINX로 HTTPS 배포하기

Coooding·2021년 12월 12일
0

letsencrypt, certbot을 이용한 인증서 발급

우선 letsencrypt, certbot에 대해 간단히 알아보고 넘어가자.

letsencrypt

letsencrypt는 보안 웹사이트를 위한 인증서를 발급해 주는 무료 인증 기관이다.
https 배포에 대해 알아보았다면 인증서가 필요한 것을 알고 있을 것이라고 생각한다.
이 인증서를 발급해 주는 곳 중 하나가 letsencrypt이다.

certbot

certbotletsencrypt로 웹 사이트의 HTTPS 설정을 쉽게 도와주는 software tool이다.

아래 certbot 설치와 https 적용 모두 certbot 공식 사이트에 과정이 잘 설명이 되어있다.

구글링을 해보면 certbot-auto를 설치하라는 글이 많은데 certbot-auto는 현재 deprecated 되었다고 한다.
certbot-auto가 deprecated된 이유 여기에 들어가 보면 회사 규모가 작아서 감당하기 힘들다는 이야기도 있고 결정적으로는 python2가 이제 끝물이라서 그렇다는 것 같다.

snapd 설치

sudo apt-get install snapd

이렇게 snapd를 설치해 준다. 참고로 snap이 무엇인지 궁금해서 찾아보니

A snap is a bundle of an app and its dependencies that works without modification across many different Linux distributions.

snap은 패키지 관리 시스템이라고 한다. 찾아보니 snap에 대해 잘 정리해놓은 글이 있어서 링크를 첨부한다! snap 정리

여튼 이렇게 설치하고

sudo snap install core; sudo snap refresh core

최신 업데이트가 되었는지 확인해 주면 snap 관련 설정은 끝이다.

snap이 최신 상태이면 이런 문구가 표시된다.

그리고 snap을 이용하지 않고 apt, dnf, yum을 이용해 이미 설치를 했었다면 삭제하고 snap으로 다시 설치할 것을 권장한다고 한다.

sudo apt-get remove certbot
sudo dnf remove certbot
sudo yum remove certbot

설치한 방법에 맞게 삭제를 해주면 된다.

certbot 설치

sudo snap install --classic certbot

위 명령어로 certbot을 설치해 준다.

sudo certbot --nginx
server {

  server_name domain;

  location / {
    root   index.html이 존재하는 경로 
    index  index.html index.htm;
    try_files $uri /index.html;
  }
   
  listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/CA_NAME/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/CA_NAME/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}


 server {
  if ($host = domain) {
  return 301 https://$host$request_uri;
 } # managed by Certbot

}

이제 certbot --nginx를 입력하게 되면 자동으로 nginx default에 위와 같이 script를 넣어준다.

sudo systemctl restart nginx 

마지막으로 위 명령어를 실행시켜주면 성공적으로 자물쇠가 달린 주소창을 확인할 수 있다.

인증서만 발급 받기

sudo certbot certonly --nginx
sudo certbot certonly --cert-name certName --standalone -d yourDomain

그리고 이건 인증서만 따로 발급받는 명령어인데 기존에 있던 인증서를 지우고 다시 발급받아 보았다. 위 명령어는 certName이라는 디렉토리 안에 yourDomain의 인증서를 만들어주는 명령어이다. certonly 옵션에 관한 설명은 여기에서 확인할 수 있다.

sudo certbot delete

우선 기존에 존재하던 인증서를 지우는 명령어를 실행했다.

그 결과 내가 받아놨던 CA가 삭제되었다.

sudo certbot certonly --cert-name certName --standalone -d yourDomain

그 다음 이 명령어를 입력해서 새로운 인증서를 발급받았다.

인증서가 잘 생성되어있는 것을 확인할 수 있다.

 listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/CA_NAME/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/CA_NAME/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

그리고 인증서만 따로 발급받는 명령어를 사용할 경우 --cert-name옵션은 default 설정 파일에서 CA_NAME 부분을 의미한다.
혹시 certbotrenew옵션을 사용하지 않고 새롭게 발급 받을 경우 설정 파일에서 certificate, certificate_key를 바뀐 이름의 경로에 맞게 설정해주면 된다.

profile
프론트엔드가 재미있는 사람

0개의 댓글