와일드카드 SSL 인증서는 하나의 인증서로 도메인과 모든 서브도메인을 보호합니다. www.example.com, blog.example.com, api.example.com에 대해 별도의 인증서를 받는 대신, 하나의 *.example.com 와일드카드가 이 모두를 포함합니다.
와일드카드 작동 원리
와일드카드 문자 *는 모든 단일 수준 서브도메인과 일치합니다:
| 인증서 | 보호 범위 | 보호하지 않는 범위 |
|---|---|---|
*.example.com | www.example.com, blog.example.com, api.example.com, anything.example.com | example.com (기본 도메인), sub.blog.example.com (중첩) |
*.example.com + example.com | 모든 서브도메인 + 기본 도메인 | 중첩 서브도메인 |
*.sub.example.com | a.sub.example.com, b.sub.example.com | sub.example.com, example.com |
핵심 제한: 와일드카드는 한 수준만 일치합니다. *.example.com은 a.b.example.com을 포함하지 않습니다.
와일드카드 vs 멀티 도메인 (SAN)
| 와일드카드 | 멀티 도메인 (SAN) | |
|---|---|---|
| 보호 범위 | 한 수준의 모든 서브도메인 | 특정 나열된 도메인 |
| 유연성 | 모든 서브도메인이 자동으로 적용 | 각 도메인을 명시적으로 나열 |
| 새 서브도메인 | 즉시 보호 | 새 인증서 필요 |
| 교차 도메인 | 불가 (하나의 기본 도메인) | 가능 (example.com + other.com) |
| DNS-01 필수 | ✅ 예 | 아니오 (HTTP-01 또는 DNS-01) |
와일드카드를 사용하세요: 서브도메인이 많거나 자주 추가하는 경우. SAN을 사용하세요: 소수의 고정된 특정 도메인/서브도메인이 있는 경우.
와일드카드 인증서를 사용해야 하는 경우
좋은 사용 사례:
- 많은 서브도메인(
app.,api.,docs.,blog.,staging.등)을 운영하며 각각에 대해 별도의 인증서를 관리하고 싶지 않은 경우 - 새 서브도메인을 자주 추가 — 재발급 없이 자동으로 보호됨
- 서브도메인 이름이 자주 변경되는 개발/스테이징 환경
와일드카드가 적합하지 않은 경우:
- 다른 기본 도메인(
example.com+example.org)을 보호해야 하는 경우 — SAN 인증서를 대신 사용 - 서브도메인별 격리가 필요 — 하나의 서브도메인 키가 유출되면 와일드카드 인증서가 모든 서브도메인을 포함
- DNS 레코드를 수정할 수 없는 경우 — 와일드카드 발급에 DNS 접근이 필요한 DNS-01 필수
보안 고려 사항
와일드카드 인증서는 하나의 개인키가 모든 서브도메인을 보호한다는 의미입니다. 키가 유출되면 공격자가 하나의 서브도메인이 아닌 모든 서브도메인을 사칭할 수 있습니다.
완화 방법:
- 개인키 접근 제한 — 필요한 서버만 키 파일을 가져야 함
- 짧은 유효 기간의 인증서 사용 — Let’s Encrypt의 90일 유효 기간이 노출 기간 제한
- 고보안 서브도메인에는 별도 인증서 고려 (예:
admin.example.com은 자체 인증서가 적합할 수 있음)
무료 와일드카드 인증서 발급
Let’s Encrypt는 DNS-01 챌린지를 통해 무료로 와일드카드 인증서를 지원합니다. 대부분의 경쟁사(ZeroSSL, SSL For Free)는 와일드카드를 유료 플랜으로 제한합니다.
GetHTTPS로:
*.example.com입력 (기본 도메인도 원하면example.com추가)- GetHTTPS가 제공하는 DNS TXT 레코드 추가
- DNS 전파 대기 (GetHTTPS가 사전 검사)
- 검증하고 인증서 파일 다운로드
와일드카드 인증서 설치
일반 인증서와 동일합니다 — 서버는 와일드카드인지 모릅니다:
Nginx:
server {
listen 443 ssl http2;
server_name *.example.com example.com;
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
}
Apache:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem
SSLCertificateKeyFile /etc/ssl/privkey.pem
SSLCertificateChainFile /etc/ssl/chain.pem
</VirtualHost>
자주 묻는 질문
와일드카드에 HTTP-01을 사용할 수 없는 이유는?
HTTP-01은 http://hostname/.well-known/acme-challenge/...에 파일을 배치하여 특정 호스트 이름을 검증합니다. 와일드카드는 무한한 서브도메인을 포함하므로 파일을 배치할 단일 서버가 없습니다. DNS-01은 존 수준의 TXT 레코드를 통해 전체 도메인에 대한 제어를 증명합니다.
*.example.com이 example.com을 포함하나요?
아닙니다. 기본 도메인은 별개입니다. 인증서 요청에 *.example.com과 example.com을 모두 추가하세요. GetHTTPS와 Certbot 모두 하나의 인증서에서 이를 지원합니다.
ZeroSSL에서 무료 와일드카드를 받을 수 있나요?
아닙니다. ZeroSSL은 와일드카드 인증서를 유료 플랜($10/월 이상)으로 제한합니다. Let’s Encrypt는 와일드카드를 무료로 제공합니다.
같은 도메인에 여러 와일드카드 인증서를 가질 수 있나요?
네. 기술적 제한이 없습니다. *.example.com과 *.staging.example.com을 별도의 인증서로 가질 수 있습니다. Let’s Encrypt의 요청 제한은 등록된 도메인당 주당 50개 인증서입니다.
와일드카드 인증서가 중첩 서브도메인을 포함하나요?
아닙니다. *.example.com은 www.example.com과 api.example.com을 포함하지만 dev.api.example.com은 포함하지 않습니다. 중첩 서브도메인에는 *.api.example.com 같은 별도의 와일드카드가 필요합니다.
와일드카드 인증서가 특정 서브도메인에서 작동하는지 테스트하려면?
서브도메인의 DNS를 서버로 지정한 후 테스트합니다:
echo | openssl s_client -connect subdomain.example.com:443 -servername subdomain.example.com 2>/dev/null | openssl x509 -noout -subject -dates
인증서에 CN=*.example.com 또는 SAN 필드에 *.example.com이 표시되어야 합니다. 연결 오류가 발생하면 서브도메인의 DNS가 와일드카드 인증서를 호스팅하는 서버를 가리키지 않는 것입니다.
여러 서버에서 와일드카드 인증서를 사용할 수 있나요?
네. 서브도메인을 처리하는 모든 서버에 동일한 fullchain.pem과 privkey.pem을 설치하세요. 인증서는 어떤 서버에 있는지 모릅니다 — 호스트 이름만 검증합니다.