Let's Encrypt로 Cloudflare DNS 환경에서 와일드카드 인증서 발급하기
#Let's Encrypt#Cloudflare#Nginx#SSL#Wildcard
Let's Encrypt는 무료로 SSL/TLS 인증서를 발급받을 수 있는 서비스입니다.
Cloudflare를 DNS로 사용하는 경우 *.mypage.com 와일드카드 인증서를
발급하려면 DNS-01 Challenge를 사용해야 합니다.
1. Cloudflare API Token 생성
Cloudflare Dashboard에서 다음 메뉴로 이동합니다.
My Profile
→ API Tokens
→ Create Token
→ Create Custom Token
권한은 다음과 같이 설정합니다.
| Permission | Access |
|---|---|
| Zone → DNS | Edit |
| Zone → Zone | Read |
Zone Resources는 mypage.com만 선택합니다.
2. Certbot 설치
sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare
Snap을 사용하는 경우
sudo snap install certbot --classic
3. API Token 저장
sudo mkdir -p /root/.secrets
sudo nano /root/.secrets/cloudflare.ini
dns_cloudflare_api_token = YOUR_API_TOKEN
sudo chmod 600 /root/.secrets/cloudflare.ini
4. 인증서 발급
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
--email admin@mypage.com \
--agree-tos \
--no-eff-email \
-d mypage.com \
-d "*.mypage.com"
Certbot은 _acme-challenge.mypage.com TXT 레코드를 자동 생성하여 인증을
수행합니다.
5. 인증서 위치
/etc/letsencrypt/live/mypage.com/
생성 파일
cert.pem
chain.pem
fullchain.pem
privkey.pem
Nginx에서는 일반적으로 다음 두 파일을 사용합니다.
ssl_certificate /etc/letsencrypt/live/mypage.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mypage.com/privkey.pem;
6. 자동 갱신 테스트
sudo certbot renew --dry-run
7. 갱신 후 Nginx 자동 Reload
sudo certbot renew \
--deploy-hook "systemctl reload nginx"
또는 /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#!/bin/bash
systemctl reload nginx
실행 권한
chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
전체 흐름
Cloudflare DNS
│
▼
Cloudflare API Token
│
▼
Certbot
│
DNS-01 Challenge
│
▼
Let's Encrypt
│
▼
/etc/letsencrypt/live/mypage.com/
│
▼
Nginx
마무리
Cloudflare DNS에서는 DNS-01 Challenge를 사용해야 와일드카드 인증서를 발급할 수 있습니다. 한 번 설정해 두면 Certbot이 인증서 갱신을 자동으로 처리하므로 운영 환경에서도 편리하게 사용할 수 있습니다.