@Joonmook

Wed Apr 15 2026 07:06:50 GMT+0000 (Coordinated Universal Time)

SSL 인증서 Certbot으로 자동갱신하기 - 만료 걱정 없이 HTTPS 유지하는 방법

thumbnail

SSL 인증서, 왜 자동갱신이 필요한가

웹사이트를 운영하다 보면 SSL 인증서 만료로 인해 사이트가 갑자기 보안 경고를 띄우는 상황을 경험하게 됩니다. Let's Encrypt에서 발급하는 무료 SSL 인증서는 유효기간이 90일로 비교적 짧기 때문에 주기적인 갱신이 필수입니다. 매번 수동으로 갱신하는 것은 번거롭고 실수가 발생하기 쉽습니다.

이 글에서는 Certbot을 활용하여 SSL 인증서를 자동으로 갱신하는 방법을 단계별로 안내합니다. 한 번 설정해두면 인증서 만료를 신경 쓰지 않아도 되므로 서버 관리가 훨씬 편리해집니다.

Certbot이란 무엇인가

Certbot은 Electronic Frontier Foundation(EFF)에서 개발한 오픈소스 도구로, Let's Encrypt 인증 기관으로부터 SSL/TLS 인증서를 자동으로 발급하고 갱신할 수 있도록 도와줍니다. Nginx, Apache 등 주요 웹 서버와의 연동을 지원하며, 명령어 몇 줄만으로 HTTPS 환경을 손쉽게 구성할 수 있습니다.

Certbot 설치하기

Ubuntu 및 Debian 계열

패키지 목록을 업데이트한 후 Certbot과 해당 웹 서버 플러그인을 설치합니다.

sudo apt update
sudo apt install certbot python3-certbot-nginx

Apache를 사용하는 경우 python3-certbot-nginx 대신 python3-certbot-apache 패키지를 설치하면 됩니다.

CentOS 및 RHEL 계열

EPEL 저장소를 먼저 활성화한 후 설치를 진행합니다.

sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx

SSL 인증서 최초 발급하기

Certbot 설치가 완료되었다면 아래 명령어로 인증서를 처음 발급받습니다. 도메인 이름은 실제 사용 중인 도메인으로 바꿔주세요.

sudo certbot --nginx -d example.com -d www.example.com

명령어를 실행하면 이메일 주소 입력, 이용 약관 동의, 이메일 수신 여부 등을 묻는 과정이 진행됩니다. 안내에 따라 입력하면 인증서 발급과 함께 Nginx 설정도 자동으로 업데이트됩��다.

인증서 발급 전에 도메인의 DNS가 해당 서버 IP로 정상적으로 연결되어 있어야 합니다. DNS 전파가 완료되지 않은 상태에서는 인증에 실패할 수 있습니다.

자동갱신 설정하기

Certbot 자동갱신 타이머 확인

최신 버전의 Certbot을 apt로 설치하면 systemd 타이머가 자동으로 등록됩니다. 아래 명령어로 타이머가 활성화되어 있는지 확인할 수 있습니다.

sudo systemctl status certbot.timer

출력 결과에서 active (waiting) 상태가 확인되면 자동갱신이 이미 설정된 것입니다. systemd 타이머는 하루에 두 번 인증서 만료 여부를 확인하고, 만료까지 30일 이하로 남은 경우 자동으로 갱신을 시도합니다.

cron을 이용한 자동갱신 설정

systemd 타이머 대신 cron을 사용하고 싶다면 아래와 같이 설정할 수 있습니다. crontab을 편집합니다.

sudo crontab -e

아래 내용을 추가합니다. 매일 오전 3시에 갱신을 시도하고, 갱신 후 Nginx를 재시작하는 설정입니다.

0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

--quiet 옵션을 사용하면 갱신이 필요 없을 때 불필요한 로그가 생성되지 않습니다. --post-hook 옵션은 갱신이 실제로 이루어진 경우에만 실행됩니다.

갱신 테스트하기

자동갱신이 정상적으로 동작하는지 미리 테스트해보는 것이 좋습니다. 아래 명령어는 실제로 인증서를 갱신하지 않고 갱신 과정을 시뮬레이션합니다.

sudo certbot renew --dry-run

출력 결과에 Congratulations, all simulated renewals succeeded 메시지가 표시되면 자동갱신 환경이 올바르게 구성된 것입니다.

인증서 상태 및 만료일 확인하기

현재 발급된 인증서 목록과 만료일을 확인하려면 아래 명령어를 사용합니다.

sudo certbot certificates

출력 결과에서 도메인 이름, 인증서 경로, 만료일(Expiry Date)을 확인할 수 있습니다. 만료일이 충분히 남아 있고 자동갱신이 활성화되어 있다면 별도의 조치 없이 인증서가 자동으�� 갱신됩니다.

자주 발생하는 문제와 해결 방법

포트 80이 차단된 경우

Let's Encrypt의 HTTP-01 인증 방식은 포트 80을 통해 도메인 소유권을 확인합니다. 방화벽에서 포트 80이 막혀 있다면 인증에 실패합니다. UFW를 사용하는 경우 아래와 같이 포트를 허용합니다.

sudo ufw allow 80
sudo ufw allow 443

웹 서버가 실행 중이지 않은 경우

인증 과정에서 웹 서버가 응답해야 하므로 Nginx 또는 Apache가 반드시 실행 중이어야 합니다.

sudo systemctl start nginx

갱신 후 웹 서버에 반영되지 않는 경우

인증서가 갱신되어도 웹 서버가 새 인증서를 로드하려면 재시작이 필요합니다. cron 또는 systemd 훅에 아래 명령어를 포함시켜야 합니다.

sudo systemctl reload nginx

reload는 서버를 중단하지 않고 설정만 다시 불러오므로 서비스 중단 없이 인증서를 교체할 수 있습니다. restart 대신 reload 사용을 권장합니다.

마무리

Certbot을 이용한 SSL 인증서 자동갱신은 한 번 설정해두면 이후에는 별도의 관리가 필요 없어 매우 편리합니다. Let's Encrypt의 90일 유효기간도 자동갱신 앞에서는 전혀 부담이 되지 않습니다.

systemd 타이머 또는 cron 중 자신의 환경에 맞는 방식을 선택하고, 반드시 --dry-run 옵션으로 테스트까지 마쳐두면 안정적인 HTTPS 운영 환경을 유지할 수 있습니다. SSL 인증서 만료로 인한 사이트 장애를 사전에 예방하여 방문자에게 신뢰할 수 있는 웹사이트를 제공하시기 바랍니다.