네트워크/SSL

SSL 서브 도메인 와일드카드(*) 인증서 발급 방법

Tech원 2025. 6. 19. 11:07

let's certbot 이라는 오픈소스 툴을 사용하여 ssl 인증서를 발급하는 방법에 대해서 알아봅시다.

🟢 certbot을 이용한 인증서 발급

발급 방법으로는 크게 2가지 정도가 있습니다.

 

  1) 기본 발급 : nginx, webroot

  : 웹서버를 통해 도메인 소유권 확인을 진행

  2) 와일드카드 도메인 발급 : route53(dns-01)

  : 도메인 관리 서비스를 통해 소유권 확인을 진행


일반적으로 certbot 관련 패키지를 다운 받고, 설정 및 인증서 발급과정을 거쳐야합니다.

다만, docker가 설치되어 있다면 스크립트 하나로 손쉽게 발급이 가능합니다.

1) 기본 발급 방식 (standalone)

- 이 스크립트는 Nginx가 설치/실행이 되지 않은 상태에서 80포트를 사용하여 standalone 방식으로 인증서를 발급받습니다.

- 차후에 nginx가 실행되고 있다는 가정 하에 webroot 방식으로 갱신이 가능하도록 세팅하는 스크립트 입니다.
- Nginx까지 docker로 운용하는 등의 opensource 프로젝트 등에 유용합니다.

# ${1} : path, ${2} : domain
docker run -it --rm --name certbot -p 80:80 \
  -v "${1}/etc/letsencrypt:/etc/letsencrypt" \
  -v "${1}/lib/letsencrypt:/var/lib/letsencrypt" \
  certbot/certbot certonly --standalone -d "${2}"
  
sed -i 's/standalone/webroot/' "${1}"/etc/letsencrypt/renewal/"${2}".conf
tee -a "${1}"/etc/letsencrypt/renewal/"${2}".conf >/dev/null

 

2) 기본 발급 방식 (webroot)

- 이 스크립트는 Nginx가 실행되고 있는 환경에서 Nginx(80포트)를 이용하는 webroot 방식으로 인증서를 발급받습니다.

- Nginx를 이용하기에 80포트 충돌이 일어나지 않으며 이로 인해 무중단으로 인증서 발급이 가능합니다.

- 프로덕션 환경 혹은 CI/CD 환경에서 유용합니다.

# ${1} : path, ${2} : domain
docker run -it --rm --name certbot \
  -v "${1}/etc/letsencrypt:/etc/letsencrypt" \
  -v "${1}/lib/letsencrypt:/var/lib/letsencrypt" \
  -v "/usr/share/nginx/html:/usr/share/nginx/html" \
  certbot/certbot certonly \
  --webroot -w /usr/share/nginx/html \
  -d "${2}" -d "www.${2}"

 

3) 와일드카드 도메인 발급 (route53)

- 이 스크립트는 AWS Route53을 이용하여 와일드카드(*) 형태의 인증서를 발급받습니다.

- DNS-01 방식을 사용하기에 포트를 사용할 필요가 없습니다.

- CI/CD 및 프로덕션 중인 AWS 환경에서 유용합니다.

# ${1} : path, ${2} : domain
docker run -it --rm --name certbot \
  -v "${1}/etc/letsencrypt:/etc/letsencrypt" \
  -v "${1}/lib/letsencrypt:/var/lib/letsencrypt" \
  -e AWS_REGION=ap-northeast-2 \
  certbot/dns-route53 certonly \
  -d "${2}" -d "*.${2}"

 

위 방식은 서브도메인을 자유롭게 사용할 수 있는 와일드카드 방법이기에 편리하지만 몇 가지 조건이 필요합니다.

- 해당 도메인이 Route53에서 관리되고 있어야합니다.

- 해당 서버(인스턴스)가 route53에 접근할 수 있는 자격증명이 필요합니다.

  - Route53 호스트 조회, 레코드 수정 권한(TXT 레코드 작성을 위함)

  - aws credential(~/.aws) 혹은 EC2 IAM role을 사용합니다.

[
  "route53:ListHostedZonesByName",
  "route53:ListResourceRecordSets",
  "route53:ChangeResourceRecordSets"
]

 

⭐️ 3-1) 응용 

여기서 조금 응용을 한다면 2차 서브 도메인 와일드카드도 생성이 가능합니다.

certbot dns-route53 옵션은 기본적으로 한 단계 하위수준의 도메인까지 생성이 가능합니다.

${2} = example.com
-> *.example.com

 

그렇다면 1차 서브도메인의 인증서를 발급 받는다면 (${2} = test.example.com) 2차 서브 도메인 와일드카드 발급이 가능해집니다.

${2} = example.com
-> *.example.com
# 예시
docker run -it --rm --name certbot \
  -v "/etc/letsencrypt:/etc/letsencrypt" \
  -v "/lib/letsencrypt:/var/lib/letsencrypt" \
  -e AWS_REGION=ap-northeast-2 \
  certbot/dns-route53 certonly \
  -d "test.exmaple.com" -d "*.test.exmaple.com"

 

이러한 응용 방식을 통해 hello.test.example.com 과 같은 구조의 도메인을 커버가 가능합니다.

 

🟢  정리

방식 인증 대상 인증 조건 사용 상황
standalone {domain}
www.{domain} 등
도메인이 해당 서버를 바라봐야함. (HTTP-01)
80포트가 미사용 중
최초의 깡통(?) 서버.
Nginx가 미설치된 상황
webroot {domain}
www.{domain} 등
도메인이 해당 서버를 바라봐야함. (HTTP-01) 프로덕션 서버
dns-route53 *.{domain}
*.www.{domain} 등
Route53에서 도메인 관리
서버가 route53 자격증명이 필요
AWS 서버