본문 바로가기
DevOps/네트워크

Certbot으로 Ubuntu의 Nginx 인증서 발급

by yscho03 2023. 8. 10.
728x90
반응형

Certbot란?

Certbot은 수동으로 관리되는 웹사이트에서 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구이다. Certbot은 전자 프론티어 재단(Electronic Frontier Foundation, EFF) 에 의해 만들어졌다.
 
간단히 말해서 HTTPS 인증서를 커멘드 명령어만으로 Nginx등에 설정할 수 있는 도구라고 보면된다.
 

 

Let's Encrypt 인증서는 신뢰할 수 있는 인증기관인가?

Let's Encrypt는 무료로 SSL/TLS 인증서를 발급하는 오픈 소스 인증 기관 중 하나로 신뢰할 수 있는 인증기관이다.
 
 

설치방법

  • Ubuntu 22.04

 
공식문서를 참조하면 좋을 것이다. 설치방법은 Snap 패키지 관리자를 통한 설치를 권장하고 있다.

Certbot 스냅은 x86_64, ARMv7 및 ARMv8 아키텍처를 지원합니다. 대부분의 사용자가 스냅을 통해 Certbot을 설치할 것을 강력히 권장하지만 여기에서 대체 설치 지침을 찾을 수 있습니다 .

1. snap 패키지 설치

snap은 패키지 관리자로 프로그램 실행에 필요한 패키지등을 모두 포함하고 있어 활용도가 높다.

$ sudo apt update
$ sudo apt install snapd

2. 기존 Cerbot 제거

$ sudo apt-get remove certbot

3. snap으로 Cerbot 설치

$ sudo snap install --classic certbot

4. 명령어 복사

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

5. 인증서 설치

$ sudo certbot --nginx -d <domain>

 
설치 완료 후 nginx 설정 파일을 열어보면 아래와 같이 자동으로 발급이 된 것을 확인할 수 있다.

server {
        server_name <도메인>;
        location / {
                proxy_pass http://127.0.0.1:<포트번호>;
                client_max_body_size 200m;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/<도메인>/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/<도메인>/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
}

 

인증서 갱신

Certbot은 60일마다 인증서를 갱신한다.
시스템의 Certbot 패키지는 인증서가 만료되기 전에 자동으로 갱신하는 cron 작업 또는 시스템 타이머와 함께 제공된다.
/etc/cron.d에 자동으로 갱신 시켜주는 커멘드가 추가되어 있다. 구성을 변경하지 않는 한 Certbot을 다시 실행할 필요가 없다. 다음의 명령을 실행하여 인증서 자동 갱신을 테스트할 수 있다.

$ sudo certbot renew --dry-run

 
아래와 같은 명령어로 인증서 갱신이 주기적으로 실행되는지 확인이 가능하다.

$ /etc/crontab/
$ /etc/cron.*/*
$ systemctl list-timers

 
타이머를 조회해보면 아래와 같이 목록에서 확인할 수 있다.

$ systemctl list-timers

NEXT                        LEFT           LAST                        PASSED       UNIT                           ACTIVATES                       
...
Thu 2023-08-10 08:16:00 UTC 8h left        Wed 2023-08-09 22:04:01 UTC 2h 10min ago snap.certbot.renew.timer       snap.certbot.renew.service
...

 
 
배치 작업이 안되어 있을 경우 수동으로 아래와 같이 crontab -e 명령어를 통하여 1달마다 갱신하도록 처리할 수 있다.
 

0 0 1 * * certbot renew --renew-hook "sudo service nginx restart"
728x90
반응형

'DevOps > 네트워크' 카테고리의 다른 글

네트워크 OSI 7계층  (0) 2021.10.25