들어가며

웹사이트의 보안을 강화하는 데 있어 SSL 인증서는 필수적이다. 그런데 인증서의 설치와 관리 방식에 따라 경험이 천차만별일 수 있자. 여기서는 주로 사용되는 세 가지 방식을 비교해보고, 어떤 방법이 가장 효율적인지 알아보겠자.

  1. 셀프사인 인증서 생성: 직접 인증서를 생성하고 배포하는 방식이다. 비용은 들지 않지만, 설치 과정이 복잡하고 브라우저 경고가 뜨는 경우가 많아 신뢰성이 떨어진다.
  2. 상용 인증서 구입: 일반 호스팅사에서 돈을 지불하고 1년짜리 인증서를 구입하는 방식이다. 신뢰성은 높으나 비용이 발생하며, 매년 갱신해야 하는 불편함이 있자.
  3. Certbot 사용: 무료로 인증서를 발급받고 자동으로 갱신하는 Certbot의 사용이다. 비용 걱정 없이 손쉽게 인증서를 관리할 수 있으며, 복잡한 설정 과정도 필요 없자.

그래서 이 글에서는 Certbot을 이용하는 과정을 단계별로 기록하고자 한다.

인증서 설정

준비사항

도메인 이름 (예: bellboy.example.com)
해당 도메인 이름으로 작성된 Nginx 설정 파일 (cfg)
설치 과정

Certbot 설치

Certbot과 Certbot-Nginx 플러그인을 설치한다.

sudo apt update
sudo apt install python3 python3-venv 
sudo apt install libaugeas0
pip install certbot
pip install certbot-nginx
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
#just in case
#sudo apt-get remove certbot

인증서 발급

원하는 도메인 이름으로 인증서를 발급한다.

sudo certbot --nginx -d bellboy.example.com
#혹은 여러 도메인을 지정할 수도 있자.
sudo certbot --nginx -d bellboy.example.com -d bellman.example.com

자동 설정

Certbot은 Nginx 설정 파일을 자동으로 수정하여 아래와 같이 SSL을 설정한다. 설정파일의 위치는 "etc/nginx/sites-available/default" 사용했다. ("/etc/nginx/nginx.conf" 이 파일에도 가능하지만 sites-available 아래에 있는 파일로 하는 것이 복잡한 관리에 더 편리하다)

# common login service
server {
    if ($host = bellboy.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    # 기타 설정...
}

server {
    listen 443 ssl;
    server_name bellboy.example.com;
    ssl_certificate /etc/letsencrypt/live/bellboy.example.com/fullchain.pem; # managed by Certbot
    # 기타 설정...
}

Nginx 재시작

변경된 설정을 적용하기 위해 Nginx를 재시작한다.

sudo nginx -t && sudo systemctl reload nginx

자동 갱신 설정

인증서를 자동으로 갱신하기 위해 crontab에 작업을 추가한다.하루에 두 번 확인해서 만료가 다가온 인증서는 자동으로 갱신되도록 한다.

sudo crontab -e
0 12,0 * * * certbot renew --pre-hook "service nginx reload" --post-hook "service nginx reload" --quiet

certbot 자체가 sudo 권한으로 실행돠어야 하므로 아래와 같이 권한을 부여해 줘야한다.

sudo visudo 
<loginid> ALL=(ALL) NOPASSWD: /usr/bin/certbot renew --pre-hook "service nginx reload" --post-hook "service nginx reload" --quiet

설치된 인증서 상태 확인

sudo certbot certificates 만으로도 전체 내용을 볼 수 있지만 어느 도메인을 위한 인증서가 언제 만료되는 지 보려면 아래와 같은 명령어로 쉽게 확인 가능하다.

sudo certbot certificates | grep -E '(Domains:|Expiry Date:)'

마치며

Certbot을 사용하니 복잡했던 인증서 설정 과정이 간단해졌고, 더 이상 돈 걱정도 하지 않아도 되는 것이 놀라운 경험이었자. 이제 누구나 쉽게 보안을 강화할 수 있는 이 방법을 활용하면, 웹사이트 운영이 한층 더 편리해질 것이다. 1분만 투자해보자. 보안 걱정은 Certbot이 해결해줄 것이다!

일하다보면 반복적으로 사용할 수 있는 데 이럴 땐 다음만 참고하자

1. Nginx 설정

server {
    if ($host = mysvc.example.com) {
        return 301 https://$host$request_uri;
    }
    listen 80;
    server_name mysvc.example.com;
    #return 404;
}
server {
    listen 443 ssl;
    server_name mysvc.example.com;
    error_page 403 404 500 502 503 504 /errors/$status.html;
    location /errors/ {
        alias /var/www/errors/;
    }

    location / {
        proxy_pass http://localhost:8080;
        proxy_intercept_errors on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

2. Certbot 실행 및 후속 실행

sudo certbot --nginx -d bellboy.example.com
sudo nginx -t && sudo systemctl reload nginx
while true; do echo -e "HTTP/1.1 200 OK\n\n Hello, World!" | nc -l -p 8080 -q 1; done

3. 브라우저로 해당 도메인(mysvc.example.com)열기하여 테스트 완료

profile
개발하면서 또는 프러덕 관리하면서 겪는 기억해둬야하는 내용을 메모장 삼아 남긴다. Google Keep이나 메모 도구에 남기는 것과는 달리 잘 정리할 수 있어서 언젠가 들춰봐야할 내용들을 담은 글들이 게시된다.

0개의 댓글