1. 개요
Let’s Encrypt 와일드카드 인증서(*.domain.com)는 보안상 DNS-01 챌린지 방식만 지원합니다. 기존의 수동 방식(Manual)은 갱신 때마다 DNS TXT 레코드를 직접 수정해야 하는 번거로움이 있어, Cloudflare API를 이용한 완전 자동화 설정을 권장합니다.
2. 주요 시행착오와 해결 방법
- 명령어 오류: 블로그 등에서 명령어를 복사할 때 하이픈(-)이 긴 대시 (-)로, 따옴표(“)가 둥근 따옴표로 바뀌어 인식되지 않는 문제가 발생할 수 있습니다. 반드시 표준 ASCII 문자를 사용해야 합니다.
- 수동 방식의 한계: _acme-challengs 레코드를 중복 등록하거나, DNS 전파 시간을 기다리지 않고 엔터를 누를 경우 NXDOMAIN 또는 Incorrect TXT record 에러가 발생합니다.
- 알고리즘의 충돌: 기존 인증서가 ECDSA 방식일 때 새 명령어가 RSA를 시도하면 충돌이 발생합니다. –key-type ecdsa 옵션을 명시하여 해결할 수 있습니다.
3. Cloudflare DNS 플러그인 자동화 단계
3.1 패키지 업데이트 및 Certbot 설치
Let’s encrypt는 certbot를 통해 인증서를 발급해야 합니다. 아직 관련 패키지가 설치되어 있지 않았다면, 패키지 설치를 진행합니다.
// 패키지 업데이트 apt-get install update // 패키지 설치 apt-get install certbot -y
3.2 플러그인 설치
apt-get install python3-certbot-dns-cloudflare
3.3 API 토큰 설정
Cloudflare 대시보드에서 Zone:DNS:Edit 권한을 가진 토큰을 생성한 뒤 서버에 저장합니다.
- 파일 경로: 예) ~/.secrets/certbot/cloudflare.ini
- 파일 내용: 예:) dns_cloudflare_api_token = YOUR_API_TOKEN
- 보안 설정: chmod 600 ~/.secrets/certbot/cloudflare.ini
3.4 인증서 발급 및 자동 갱신 설정
certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \ --cert-name mydomain.com \ --key-type ecdsa \ -d "mydomain.com" -d "*.mydomain.com" \ --preferred-challenges dns \ --non-interactive \ --agree-tos \ -m [email protected]
3.5 기존 수동/Standalone 인증서 전환 팁
기존에 manual이나 standalone 방식으로 발급받은 인증서가 있다면 certbot renew 시 에러가 발생합니다. 이때는 위 명령어를 –force-renewal 옵션과 함께 실행하여 인증서의 갱신 메커니즘 자체를 dns-cloudflare로 교체해 주어야 합니다.
3.6 최종 확인
설정이 완료된 후 아래 명령어를 실행하여 모든 도메인이 성공적으로 업데이트되는지 확인합니다.
certbot renew --dry-run
결과: “Congratulations, all simulated renewals succeeded:” 메시지가 나오면 정상적으로 인증서가 갱신되었습니다.
