현재 웹 트래픽의 상당 부분이 HTTPS로 암호화되어 전송되고 있습니다. 특히 업계 주요 기업들의 지원을 받는 인증 기관(CA)인 Let's Encrypt가 등장한 이후 무료 SSL/TLS 인증서 보급이 더욱 활발해졌습니다. Let's Encrypt는 유효 기간 90일의 SSL/TLS 인증서를 완전히 무료로 제공합니다.
일반적인 인증서는 하나 이상의 특정 도메인 이름에 묶여 있습니다. 즉, "www.example.com"용 인증서를 발급받았다면 정확히 그 도메인에만 사용할 수 있습니다. 반면 와일드카드 인증서는 상위 도메인 기준으로 발급되어 해당 도메인의 모든 하위 도메인에 사용할 수 있습니다. 예를 들어 *.example.com 용 와일드카드 인증서 하나만 있으면 "www.example.com", "account.example.com", "mail.example.com" 등 모든 서브도메인에 적용할 수 있습니다. 따라서 현재와 미래의 모든 서브도메인을 위해 단 한 번의 발급과 갱신만으로 관리할 수 있다는 큰 장점이 있습니다.
이 글에서는 Ubuntu, Debian 등 데비안 계열 리눅스 배포판에서 Let's Encrypt를 통해 와일드카드 인증서를 발급받는 방법을 소개합니다.
1. acme.sh 설치하기
Let's Encrypt는 ACME(Automated Certificate Management Environment) 프로토콜을 사용해 도메인 소유권을 검증하고 인증서를 발급·갱신합니다. acme.sh는 셸 스크립트로 구현된 대표적인 ACME 클라이언트입니다. 설치하려면 먼저 git을 설치합니다.
sudo apt update sudo apt install -y git
GitHub에서 저장소를 클론합니다.
git clone https://github.com/Neilpang/acme.sh.git
클론된 디렉터리로 이동한 뒤 설치 스크립트를 실행합니다.
cd acme.sh/ ./acme.sh --install
셸 세션을 다시 불러오면 acme.sh 명령어를 바로 사용할 수 있습니다.
exec bash
2. acme.sh로 와일드카드 인증서 발급하기
Let's Encrypt가 와일드카드 인증서를 발급하려면 DNS 기반 챌린지인 도메인 검증(DV, Domain Validation)을 통과해야 합니다. 다행히 acme.sh는 주요 DNS 업체들의 API와 연동되어 이 과정을 완전히 자동화할 수 있습니다.
Cloudflare
Cloudflare DNS를 사용 중이라면 계정에 로그인한 후 글로벌 API 키를 복사하여 환경 변수로 등록합니다.
export CF_Key="your_cloudflare_api_key" export CF_Email="your_cloudflare_email_address"
이제 와일드카드 인증서를 요청할 수 있습니다.
acme.sh --issue --dns dns_cf -d '*.example.org'
NameCheap
NameCheap 네임서버를 사용한다면 먼저 공식 안내에 따라 API 접근을 활성화한 후 필요한 변수를 내보냅니다.
export NAMECHEAP_SOURCEIP="your_server_ip" export NAMECHEAP_USERNAME="your_namecheap_username" export NAMECHEAP_API_KEY="your_namecheap_api_key"
와일드카드 인증서를 요청합니다.
acme.sh --issue --dns dns_namecheap -d '*.example.org'
DigitalOcean
도메인이 DigitalOcean DNS를 사용한다면 읽기/쓰기 권한이 있는 개인 액세스 토큰을 생성한 뒤 API 키를 환경 변수로 설정합니다.
export DO_API_KEY="your_digitalocean_api_token"
와일드카드 인증서를 요청합니다.
acme.sh --issue --dns dns_dgon -d '*.example.org'
GoDaddy
GoDaddy DNS를 사용한다면 API 키와 시크릿을 복사하여 환경 변수로 등록합니다.
export GD_Key="your_godaddy_api_key" export GD_Secret="your_godaddy_api_secret"
와일드카드 인증서를 요청합니다.
acme.sh --issue --dns dns_gd -d '*.example.org'
Vultr
Vultr DNS를 사용 중이라면 개인 액세스 토큰 또는 "Manage DNS" 권한이 있는 서브 프로필이 필요합니다.
export VULTR_API_KEY="your_vultr_api_key"
와일드카드 인증서를 요청합니다.
acme.sh --issue --dns dns_vultr -d '*.example.org'
RackSpace
RackSpace를 사용한다면 사용자명과 API 키가 필요하며, 아래와 같이 환경 변수로 설정합니다.
export RACKSPACE_Username="your_rackspace_username" export RACKSPACE_Apikey="your_rackspace_api_key"
와일드카드 인증서를 요청합니다.
acme.sh --issue --dns dns_rackspace -d '*.example.org'
수동 발급 방법
DNS 업체의 API를 사용할 수 없거나 사용하지 않으려는 경우, DNS TXT 레코드를 직접 생성해 도메인 검증을 완료할 수 있습니다. 단, 이 방식은 인증서를 갱신할 때마다 동일한 수동 작업을 반복해야 합니다.
acme.sh --issue --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please -d '*.example.org'
위 명령을 실행하면 검증 토큰이 출력됩니다. 이 토큰을 DNS TXT 레코드로 추가해야 합니다.

토큰을 복사한 뒤 DNS 관리 패널에 로그인하고, _acme-challenge 서브도메인에 TXT 유형의 새 DNS 레코드를 생성한 후 토큰 값을 붙여넣습니다.

새 레코드가 전파될 때까지 몇 분 정도 기다린 후 인증서를 발급받습니다.
acme.sh --renew --yes-I-know-dns-manual-mode-enough-go-ahead-please -d '*.example.org'
인증서 파일 위치
발급된 인증서와 관련 파일은 홈 디렉터리의 ".acme.sh" 폴더에서 확인할 수 있습니다.
- 인증서 본체: "~/.acme.sh/*.example.org/*.example.org.cer" 경로에 저장됩니다.
- 인증서 키: "~/.acme.sh/*.example.org/*.example.org.key" 경로에 저장됩니다. 이 파일은 외부에 절대 노출해서는 안 되며 철저히 보관해야 합니다.
- 풀체인 인증서(fullchain): 실제 서버 설정에 가장 많이 사용되는 파일로, "~/.acme.sh/*.example.org/fullchain.cer" 경로에 저장됩니다. 이 파일에는 인증서 본체와 발급 기관의 인증서(중간 인증서)가 함께 포함되어 있습니다.
위 과정을 순서대로 따라 하면 누구나 Let's Encrypt 와일드카드 도메인 인증서를 무료로 발급받아 여러 서브도메인을 손쉽게 HTTPS로 보호할 수 있습니다.