본문 바로가기
Programming/환경셋팅

Godaddy + Certbot으로 와일드카드 SSL 인증서 자동 갱신하기

by Chan_찬 2025. 3. 6.
반응형

certbot + godaddy -> wildcard SSL

GoDaddy에서 제공하는 API를 활용해 Certbot으로 SSL 인증서를 자동 갱신하는 방법을 소개합니다. 아래 예시는 실제 환경에 적용할 때 개인 정보를 반드시 수정해야 합니다.

사전 준비사항

1. GoDaddy API Key 및 Secret 발급

  • GoDaddy Developer 사이트에 접속하여 API 키와 시크릿을 발급받습니다.
  • Test(테스트)용과 Production(실제 운영)용 중 선택 가능합니다.

2. 도메인 준비

  • GoDaddy에서 이미 도메인을 관리하고 있어야 합니다.
  • 이 가이드에서는 example.com 도메인을 예시로 사용합니다.

Certbot 및 dns-godaddy 플러그인 설치

리눅스 환경(도커 또는 VM)에서 다음 명령어를 실행합니다:

apk add py3-pip python3-dev
pip install certbot-dns-godaddy

플러그인 설치 확인:

certbot plugins

GoDaddy 자격증명 파일 생성

  1. 자격증명 파일 생성:
mkdir -p /root/.secrets
echo "dns_godaddy_key = YOUR_API_KEY" >> /root/.secrets/godaddy.ini
echo "dns_godaddy_secret = YOUR_API_SECRET" >> /root/.secrets/godaddy.ini
  1. 파일 권한 설정:
chmod 600 /root/.secrets/godaddy.ini

Certbot으로 인증서 발급

다음 명령어로 와일드카드 SSL 인증서를 발급받습니다:

certbot certonly \
  --authenticator dns-godaddy \
  --dns-godaddy-credentials /root/.secrets/godaddy.ini \
  -d example.com \
  -d '*.example.com' \
  -m admin@example.com \
  --agree-tos \
  --dns-godaddy-propagation-seconds 60

주요 옵션 설명

  • -d example.com -d '*.example.com': 메인 도메인과 서브도메인 지정
  • -m admin@example.com: 인증서 알림 수신 이메일
  • --dns-godaddy-propagation-seconds 60: DNS 전파 대기 시간 설정

자동 갱신 스크립트 예시

Kubernetes 환경을 위한 auto_certbot.sh

#!/bin/ash
# auto_certbot.sh

# Godaddy 인증 파일 생성
mkdir /root/.secrets

echo 'dns_godaddy_key=YOUR_API_KEY' > /root/.secrets/godaddy.ini
echo 'dns_godaddy_secret=YOUR_API_SECRET' >> /root/.secrets/godaddy.ini

# Certbot 및 플러그인 설치
apk add py3-pip python3-dev
pip install certbot-dns-godaddy

# 기존 인증서 정리 (필요 시)
rm -rf /etc/letsencrypt/archive/example.com
rm -rf /etc/letsencrypt/live/example.com

# 인증서 발급
certbot certonly \
  --authenticator dns-godaddy \
  --dns-godaddy-credentials /root/.secrets/godaddy.ini \
  -d example.com \
  -d '*.example.com' \
  -m admin@example.com \
  --agree-tos \
  --dns-godaddy-propagation-seconds 60

인증서 복사 스크립트 auto_getting_ssl.sh

#!/bin/zsh
# auto_getting_ssl.sh

podName=$1
certFolderName=$2

kubectl cp $podName:/etc/letsencrypt/archive/$certFolderName/cert1.pem ./cert.pem
kubectl cp $podName:/etc/letsencrypt/archive/$certFolderName/chain1.pem ./chain.pem
kubectl cp $podName:/etc/letsencrypt/archive/$certFolderName/fullchain1.pem ./fullchain.pem
kubectl cp $podName:/etc/letsencrypt/archive/$certFolderName/privkey1.pem ./privkey.pem

Kubernetes 환경에서 실행

# auto_certbot.sh 스크립트를 Pod에 전달 및 실행
cat ./auto_certbot.sh | kubectl exec -it <YOUR_POD_NAME> -- ash

# 호스트로 인증서 파일 복사
./auto_getting_ssl.sh <YOUR_POD_NAME> example.com

크론탭을 이용한 자동 갱신

3개월마다 인증서를 자동으로 갱신하려면 다음과 같이 크론탭을 설정합니다:

crontab -e

크론탭 설정:

0 3 1 * * /bin/bash /root/auto_certbot.sh && /bin/bash /root/auto_getting_ssl.sh <YOUR_POD_NAME> example.com >> /var/log/ssl_renewal.log 2>&1

주의사항

  • API 키와 시크릿은 항상 안전하게 관리하세요.
  • 실제 운영 환경에서는 인증서 파일을 Kubernetes Secret이나 ConfigMap으로 관리하는 것이 좋습니다.

DNS 인증 방식을 사용하면 HTTP/HTTPS 포트 문제 없이 SSL 인증서를 쉽게 관리할 수 있습니다. 궁금한 점이 있다면 댓글로 문의해주세요.

728x90
반응형
BIG
Buy me a coffeeBuy me a coffee

댓글