무료 Let's Encrypt 인증서
certbot으로 VPS에서 HTTPS 인증서를 발급하고 자동 갱신하는 방법, 포트 80이 이미 사용 중인 경우까지 다뤄요.
업데이트 2026년 8월 23일
브라우저에서 “안전하지 않음” 경고가 뜨지 않고 폼과 결제가 제대로 작동하려면 인증서가 필요해요. Let's Encrypt는 90일 동안 무료로 인증서를 발급하고 자동 갱신까지 지원해요.
준비
세 가지를 확인해야 해요. 그렇지 않으면 발급이 실패해요:
dig +short example.ru # should return your machine's address
ss -tulpn | grep -E ':80|:443'
- 도메인의 A 레코드가
/hosting/vds/m/<id>제어판의 “개요” 탭에 있는 주소를 가리켜야 해요; - 포트 80이 외부에서 접근 가능해야 해요 — Let's Encrypt가 도메인 소유권을 확인할 때 사용해요;
- 웹 서버가 실행 중이어야 해요: Nginx 또는 Apache.
Caddy를 사용한다면 아무것도 할 필요가 없어요 — 인증서를 자체적으로 발급해요.
발급
apt install -y certbot python3-certbot-nginx # Debian, Ubuntu
dnf install -y certbot python3-certbot-nginx # AlmaLinux, CentOS Stream
certbot --nginx -d example.ru -d www.example.ru
Apache도 python3-certbot-apache와 --apache 플래그를 사용하면 같은 방식이에요. Certbot이 설정 파일에 인증서 블록과 HTTP에서 HTTPS로의 리디렉션을 직접 추가해요.
결과를 확인해 보세요:
certbot certificates
curl -I https://example.ru
자동 갱신
패키지가 시스템 타이머를 설치하고, 이 타이머가 갱신도 처리해요. 타이머가 활성화되어 있는지 확인하고 테스트 갱신을 실행해 보세요:
systemctl list-timers | grep certbot
certbot renew --dry-run
드라이 런은 필수예요. 두 달 뒤에 갱신이 깨질 상황을 미리 잡아내요 — 예를 들어 사이트 설정 파일 이름을 바꿔서 certbot이 인증 파일을 어디에 둘지 모르게 된 경우 같은 상황이에요.
포트 80이 사용 중일 때
애플리케이션이 포트 80에서 실행 중이고 웹 서버를 그 자리에 둘 수 없다면 별도 모드를 사용하세요:
certbot certonly --standalone --preferred-challenges http -d example.ru
Certbot이 확인하는 동안 자체 임시 서버를 띄워요. 그러려면 애플리케이션을 중지해야 하는데, --pre-hook과 --post-hook이 자동으로 처리해 줄 수 있어요.
발급 후 인증서는 /etc/letsencrypt/live/example.ru/에 있어요: fullchain.pem과 privkey.pem.
자주 발생하는 오류
| 증상 | 원인 |
|---|---|
Timeout during connect | 포트 80이 방화벽에 막혀 있거나 도메인이 다른 머신을 가리키고 있어요 |
too many certificates already issued | 도메인의 주간 한도에 도달했어요 — 기다리거나 --staging으로 디버그하세요 |
| 발급 후에도 사이트가 이전 인증서를 제공해요 | 웹 서버를 리로드하지 않았어요: systemctl reload nginx |
| 인증서가 만료되었어요 | 타이머가 비활성화되어 있어요 — systemctl enable --now certbot.timer를 확인하세요 |
/etc/letsencrypt디렉터리는 데이터의 일부예요. 머신의 자동 백업은 없으니 웹 서버 설정과 함께 백업에 포함하세요.