
Ubuntu 24.04에서 Certbot은 주로 Let's Encrypt SSL/TLS 인증서 발급 및 자동 갱신에 사용됩니다. 웹서버 종류(Apache, Nginx, Reverse Proxy, Docker 환경 등)에 따라 사용 방법이 조금씩 달라집니다.
Certbot이란?
Certbot은 무료 인증기관인 Let's Encrypt의 인증서를 자동 발급·갱신하는 ACME 클라이언트입니다.
주요 기능:
SSL 인증서 발급
인증서 자동 갱신
웹서버 설정 자동 적용
Wildcard 인증서 발급
테스트(Staging) 인증서 발급
1. Ubuntu 24.04 설치
Ubuntu 24.04에서는 Snap 버전 사용이 권장됩니다.
sudo apt update
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
확인:
certbot --version
예상 결과:
certbot 3.x.x
2. 가장 쉬운 방법 (Nginx 자동 설정)
Nginx가 이미 설치되어 있고 정상 동작 중인 경우
sudo certbot --nginx
Certbot이:
도메인 검색
인증서 발급
Nginx SSL 설정
HTTP → HTTPS 리다이렉트
까지 자동으로 처리합니다.
예:
sudo certbot --nginx -d example.com -d www.example.com
3. Apache 자동 설정
Apache 환경:
sudo certbot --apache
예:
sudo certbot --apache \
-d example.com \
-d www.example.com
4. Webroot 방식
가장 많이 사용하는 서버 운영 방식 중 하나입니다.
Nginx/Apache 설정은 직접 관리하고 인증만 Certbot이 수행합니다.
예:
sudo certbot certonly \
--webroot \
-w /var/www/html \
-d example.com
설명:
-w : 웹루트
-d : 도메인
여러 도메인:
sudo certbot certonly \
--webroot \
-w /var/www/html \
-d example.com \
-d www.example.com
5. Standalone 방식
웹서버가 없어도 인증 가능
Certbot이 임시 웹서버를 띄웁니다.
sudo systemctl stop nginx
sudo certbot certonly --standalone \
-d example.com
sudo systemctl start nginx
사용 상황:
초기 구축
임시 서버
API 서버
6. DNS 방식 (Wildcard 인증서)
Wildcard 인증서:
*.example.com
발급 가능
예:
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d example.com \
-d '*.example.com'
Certbot이 TXT 레코드를 생성하라고 안내합니다.
DNS 제공업체 API 플러그인을 사용하는 것이 일반적입니다.
예:
Cloudflare
AWS Route53
Google Cloud DNS
7. Cloudflare DNS 자동 인증
Cloudflare를 많이 사용합니다.
플러그인 설치:
sudo snap set certbot trust-plugin-with-root=ok
sudo snap install certbot-dns-cloudflare
API Token 파일:
dns_cloudflare_api_token=xxxxxxxx
권한 설정:
chmod 600 cloudflare.ini
발급:
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials cloudflare.ini \
-d example.com \
-d '*.example.com'
8. 인증서 위치
발급 후:
/etc/letsencrypt/live/example.com/
파일:
fullchain.pem
privkey.pem
cert.pem
chain.pem
일반적으로 사용:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
9. 자동 갱신
Let's Encrypt 인증서는 90일 유효합니다.
테스트:
sudo certbot renew --dry-run
실제 갱신:
sudo certbot renew
Ubuntu 24.04의 Snap 버전은 보통 systemd timer가 자동 등록됩니다.
확인:
systemctl list-timers | grep certbot
10. 갱신 후 서비스 재시작
Nginx 재로드:
sudo certbot renew \
--deploy-hook "systemctl reload nginx"
Apache:
sudo certbot renew \
--deploy-hook "systemctl reload apache2"
11. 자주 사용하는 옵션
이메일 지정
--email admin@example.com
EULA 자동 동의
--agree-tos
비대화식 실행
자동화 스크립트용
--non-interactive
특정 도메인
-d example.com
여러 도메인
-d example.com -d www.example.com
테스트 환경
Let's Encrypt 제한에 걸리지 않도록 테스트
--staging
예:
sudo certbot certonly \
--standalone \
--staging \
-d example.com
강제 갱신
--force-renewal
인증서 이름 지정
--cert-name mycert
12. Docker 환경에서 주의점
Docker 컨테이너 내부보다 호스트에서 Certbot을 운영하는 것이 일반적입니다.
구성 예:
Host
├─ Certbot
├─ Nginx
└─ Docker Containers
Nginx Reverse Proxy:
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
운영 환경 추천
대부분의 운영 서버에서는 아래 조합이 가장 관리하기 편합니다.
환경 | 추천 방식 |
|---|---|
단일 Nginx 서버 |
|
단일 Apache 서버 |
|
Reverse Proxy |
|
Docker + Nginx |
|
Kubernetes | Certbot보다 ACME Controller 사용 |
Wildcard 인증서 | DNS Challenge |
Cloudflare 사용 | DNS API 방식 |
Certbot으로 발급된 인증서를 삭제할 때는 Certbot이 관리하는 인증서 정보와 웹서버 설정을 함께 고려해야 합니다.
현재 인증서 목록 확인
먼저 Certbot이 관리 중인 인증서를 확인합니다.
sudo certbot certificates
예시:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2026-08-01
여기서 Certificate Name이 삭제 대상입니다.
Certbot에서 인증서 삭제
특정 인증서를 삭제:
sudo certbot delete --cert-name example.com
또는 대화형으로:
sudo certbot delete
실행 시 삭제할 인증서를 선택할 수 있습니다.
삭제되는 항목:
/etc/letsencrypt/live/example.com/etc/letsencrypt/archive/example.com/etc/letsencrypt/renewal/example.com.conf
등 Certbot 관리 파일
Nginx/Apache 설정 확인
Certbot 인증서를 삭제해도 웹서버 설정은 자동으로 정리되지 않는 경우가 많습니다.
예를 들어 Nginx 설정에:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
가 남아 있으면 Nginx 재시작 시 오류가 발생합니다.
설정 수정 후 테스트:
sudo nginx -t
적용:
sudo systemctl reload nginx
Apache도 마찬가지로 SSL 설정을 점검해야 합니다.
인증서만 재발급하려는 경우
삭제 대신 아래 옵션을 사용하는 것이 더 안전한 경우가 많습니다.
강제 갱신:
sudo certbot renew --force-renewal
도메인 변경:
sudo certbot certonly \
--cert-name example.com \
-d example.com \
-d api.example.com
기존 인증서를 교체하면서 갱신합니다.
Certbot 자체 제거
Certbot을 완전히 제거하려면:
Snap 설치 기준:
sudo snap remove certbot
그리고 인증서까지 모두 제거하려면:
sudo rm -rf /etc/letsencrypt
주의: 이 명령은 서버의 모든 Let's Encrypt 인증서를 삭제합니다.
삭제 전에 확인할 것
다음 명령으로 어떤 서비스가 인증서를 사용 중인지 확인하는 것이 좋습니다.
sudo grep -R "/etc/letsencrypt/live" /etc/nginx /etc/apache2 2>/dev/null
또는
sudo grep -R "ssl_certificate" /etc/nginx
특히 여러 도메인을 운영 중인 서버에서는 하나의 인증서가 여러 가상호스트에서 공유될 수 있으므로, 삭제 전에 sudo certbot certificates 출력 내용을 확인하는 것이 중요합니다.
