이전 글목록 보기다음 글
certbot2026-06-06T02:09:14.740Z

Certbot 설정

Anya2_Forger profileAnya2_Forger
edited-lets_encrypt.png

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이:

  1. 도메인 검색

  2. 인증서 발급

  3. Nginx SSL 설정

  4. 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 서버

certbot --nginx

단일 Apache 서버

certbot --apache

Reverse Proxy

certbot --nginx

Docker + Nginx

--webroot 또는 --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 출력 내용을 확인하는 것이 중요합니다.

Comments

Log in to comment

Loading comments...
이전 글목록 보기다음 글

당신의 이야기를 기다리고 있습니다