# SSL wildcard miễn phí với Let's Encrypt (DNS-01) và DNSSEC

> Cách lấy SSL wildcard miễn phí từ Let's Encrypt bằng xác thực DNS-01, tự động gia hạn, và dùng an toàn cùng DNSSEC và bản ghi CAA.

Source: https://zopanel.net/vi/blog/wildcard-ssl-lets-encrypt-dnssec  
Updated: 2026-10-21

## Ý chính

- Let's Encrypt cấp chứng chỉ wildcard miễn phí, nhưng chỉ qua xác thực DNS-01, cần bản ghi TXT tại _acme-challenge cho mỗi lần cấp.
- Wildcard chỉ phủ một cấp tên miền con và không phủ tên miền gốc, nên hãy xin cả example.com lẫn *.example.com.
- Bắt buộc phải tự động hóa: thời hạn giảm còn 64 ngày từ tháng 2/2027 và 45 ngày từ tháng 2/2028, thời gian dùng lại xác thực cũng giảm.
- Let's Encrypt kiểm tra DNSSEC ở mọi truy vấn, nên DNSSEC cấu hình sai sẽ chặn việc cấp chứng chỉ; hãy sửa bản ghi DS trước khi đổ lỗi cho ACME client.

Có, bạn lấy được SSL wildcard miễn phí từ Let's Encrypt, nhưng chỉ qua xác thực DNS-01: ACME client phải tạo một bản ghi TXT tại `_acme-challenge.example.com`, Let's Encrypt tra bản ghi này rồi mới cấp `*.example.com`. Trên thực tế, client cần quyền gọi API của nhà cung cấp DNS, hoặc DNS phải chạy ngay trên server có client. Nếu zone được ký DNSSEC, chữ ký phải hợp lệ, vì Let's Encrypt kiểm tra DNSSEC ở mọi truy vấn và từ chối cấp khi xác thực thất bại.

Bài [SSL miễn phí với Let's Encrypt](/vi/blog/free-ssl-lets-encrypt) đã nói về chứng chỉ thường, Certbot và giới hạn tần suất. Bài này tập trung vào những gì riêng của wildcard: DNS-01 hoạt động thế nào, tự động hóa an toàn ra sao, thay đổi thời hạn sắp tới ảnh hưởng gì, và DNSSEC cùng bản ghi CAA liên quan thế nào.

## Khi nào bạn cần chứng chỉ wildcard?

Chứng chỉ wildcard cho `*.example.com` hợp lệ với `shop.example.com`, `staging.example.com` và mọi tên khác ở ngay dưới `example.com` một cấp. Nó hợp lý khi:

- bạn tạo tên miền con thường xuyên, ví dụ mỗi khách hàng một subdomain trong ứng dụng SaaS (`acme.ungdung.vn`), hoặc mỗi website staging một subdomain;
- tên miền con được phần mềm tạo ra trước khi kịp thêm vào chứng chỉ;
- bạn không muốn tên từng subdomain xuất hiện trong log Certificate Transparency công khai, vì chỉ `*.example.com` được ghi lại.

Không phải lúc nào wildcard cũng tốt hơn. Khóa riêng của wildcard bảo vệ mọi subdomain, nên nếu lộ từ một server thì tất cả đều bị ảnh hưởng. Nếu bạn chỉ có ba subdomain cố định, một chứng chỉ thường liệt kê ba tên đó, xác thực qua HTTP, đơn giản hơn và không cần quyền vào DNS.

### Wildcard không phủ những gì

Hai quy tắc hay khiến người dùng nhầm:

| Tên | `*.example.com` có phủ không? |
| --- | --- |
| `www.example.com`, `shop.example.com` | Có |
| `example.com` (tên miền gốc) | Không, cần thêm tên này |
| `a.b.example.com` (hai cấp) | Không, cần `*.b.example.com` |

Wildcard chỉ khớp đúng một nhãn, theo định nghĩa cho TLS trong [RFC 9525](https://www.rfc-editor.org/rfc/rfc9525.html). Vì vậy hầu hết cấu hình xin hai tên trên cùng một chứng chỉ: `example.com` và `*.example.com`.

## Xác thực DNS-01 hoạt động thế nào?

[Trang challenge types của Let's Encrypt](https://letsencrypt.org/docs/challenge-types/) là mô tả chính thức. Tóm tắt:

1. ACME client xin chứng chỉ cho `*.example.com`.
2. Let's Encrypt đưa cho client một token. Client tính ra một giá trị từ token và khóa tài khoản.
3. Client công bố giá trị đó dưới dạng bản ghi TXT tại `_acme-challenge.example.com`.
4. Let's Encrypt truy vấn DNS authoritative của bạn. Nếu giá trị TXT khớp, chứng chỉ được cấp.
5. Client xóa bản ghi TXT.

HTTP-01 "cannot be used to issue wildcard certificates", nên không có cách nào tránh DNS. Cùng trang đó liệt kê ưu nhược điểm. DNS-01 dùng được khi cổng 80 đóng hoặc web server không public, và khi có nhiều web server sau một tên. Ngược lại, lưu thông tin đăng nhập API DNS trên web server là rủi ro, một số nhà cung cấp DNS không có API, và một số API không báo khi thay đổi đã tới mọi nameserver, nên bạn có thể phải chờ.

## Ba cách tự động hóa DNS-01

Tạo TXT bằng tay dùng được một lần (`certbot certonly --manual --preferred-challenges dns`), nhưng chứng chỉ làm tay không tự gia hạn. Hãy chọn một trong các cách sau.

| Cách | Hoạt động thế nào | Cần chú ý |
| --- | --- | --- |
| API của nhà cung cấp DNS | ACME client dùng plugin (Certbot DNS plugin, acme.sh, lego) để tạo TXT qua API | Dùng API token chỉ có quyền trên một zone và bản ghi TXT nếu nhà cung cấp hỗ trợ |
| Ủy quyền bằng CNAME | Trỏ `_acme-challenge.example.com` bằng CNAME sang một tên ở zone riêng mà chỉ ACME client điều khiển | Let's Encrypt đi theo CNAME như tài liệu mô tả; giữ zone được ủy quyền nhỏ và khóa chặt |
| DNS trên cùng server | ACME client ghi TXT thẳng vào DNS authoritative chạy ngay bên cạnh | Nameserver phải ổn định, tốt nhất là hai cái trên hai server khác nhau |

Dù chọn cách nào, hãy dọn bản ghi TXT cũ. Let's Encrypt chấp nhận nhiều giá trị TXT ở cùng một tên, nhưng cảnh báo phản hồi quá lớn có thể bị từ chối. Nếu DNS của bạn trải trên nhiều nameserver hoặc mạng anycast, hãy chắc chắn mọi nameserver đã có bản ghi trước khi client yêu cầu xác thực.

## Thời hạn ngắn hơn khiến tự động hóa là bắt buộc

Chứng chỉ Let's Encrypt hiện có hạn 90 ngày, và [FAQ](https://letsencrypt.org/docs/faq/) còn có chứng chỉ 6 ngày cho ai chọn dùng. [Kế hoạch công bố tháng 12/2025](https://letsencrypt.org/2025/12/02/from-90-to-45/) rút ngắn cả thời hạn chứng chỉ lẫn thời gian được dùng lại một lần xác thực thành công:

| Thời điểm | Profile mặc định (`classic`) | Dùng lại xác thực |
| --- | --- | --- |
| Hiện tại (10/2026) | Chứng chỉ 90 ngày | 30 ngày |
| 10/2/2027 | Chứng chỉ 64 ngày | 10 ngày |
| 16/2/2028 | Chứng chỉ 45 ngày | 7 giờ |

Profile `tlsserver` (tự chọn dùng) được lên lịch cấp chứng chỉ 45 ngày từ 13/5/2026. Thay đổi về thời gian dùng lại xác thực ảnh hưởng wildcard nhiều nhất: với khoảng 7 giờ, gần như lần gia hạn nào cũng cần bản ghi TXT mới, nên tự động hóa DNS phải chạy đúng mọi lần, không chỉ lần đầu. Let's Encrypt khuyên dùng ACME Renewal Information (ARI) hoặc gia hạn ở khoảng hai phần ba thời hạn, và cảnh báo lịch gia hạn cố định 60 ngày sẽ không còn đủ.

Let's Encrypt cũng đã công bố **DNS-PERSIST-01**, cách xác thực mà bản ghi TXT chỉ cần đặt một lần, không đổi mỗi lần gia hạn ([thông báo](https://letsencrypt.org/2026/02/18/dns-persist-01.html)). Tại thời điểm viết bài, trang challenge types chưa liệt kê phương thức này, nên đừng lên kế hoạch dựa vào nó cho tới khi có.

## DNSSEC và chứng chỉ wildcard

DNSSEC ký zone DNS để resolver có kiểm tra phát hiện được câu trả lời giả mạo. Điều này quan trọng với chứng chỉ vì chính các truy vấn DNS là cách CA xác định ai kiểm soát tên miền. Nhân viên Let's Encrypt đã khẳng định [Let's Encrypt luôn kiểm tra DNSSEC](https://community.letsencrypt.org/t/lets-encrypt-and-dnssec-verification/213809) trong các truy vấn, dù không bắt buộc tên miền phải được ký.

Điều đó dẫn tới hai hệ quả:

- **Lợi ích:** nếu zone được ký, kẻ tấn công giả mạo câu trả lời DNS gửi tới resolver của Let's Encrypt không thể làm giả bản ghi TXT `_acme-challenge` hay bản ghi CAA của bạn, vì bản giả không qua được kiểm tra.
- **Rủi ro:** nếu DNSSEC bị lỗi, ví dụ bản ghi DS cũ còn ở nhà đăng ký sau khi đổi khóa, Let's Encrypt nhận SERVFAIL và từ chối cấp. [Tài liệu CAA](https://letsencrypt.org/docs/caa/) của Let's Encrypt cho biết SERVFAIL trên zone có ký "most often" là do lỗi xác thực DNSSEC, và gợi ý dùng công cụ như dnsviz.net.

Khi bật DNSSEC, chỉ khai báo bản ghi DS ở nhà đăng ký sau khi zone đã được ký. Khi tắt, làm ngược lại: gỡ bản ghi DS trước, chờ hết TTL, rồi mới ngừng ký. Ngừng ký khi DS vẫn còn khiến cả tên miền không phân giải được với các resolver có kiểm tra DNSSEC, chứ không chỉ riêng việc cấp chứng chỉ.

### Bản ghi CAA cho wildcard

Bản ghi CAA liệt kê CA nào được phép cấp chứng chỉ cho tên miền của bạn. Trang CAA của Let's Encrypt giải thích các thẻ liên quan:

| Thẻ | Tác dụng |
| --- | --- |
| `issue "letsencrypt.org"` | Cho phép Let's Encrypt cấp cả tên thường và wildcard, trừ khi `issuewild` quy định khác |
| `issuewild` | Quyền riêng chỉ dành cho tên wildcard |
| Tham số `accounturi` | Chỉ cho phép tài khoản ACME của bạn, để kẻ chiếm DNS tạm thời không dùng được tài khoản của họ |
| Tham số `validationmethods` | Giới hạn loại xác thực được dùng, ví dụ chỉ `dns-01` |

Bản ghi CAA đáng tin nhất khi nằm trong zone có ký DNSSEC, cùng lý do như bản ghi TXT.

## SSL wildcard và DNSSEC trên ZoPanel

ZoPanel đi theo cách "DNS trên cùng server". Khi quản trị viên cài DNS server (PowerDNS) và zone của tên miền được host và trỏ nameserver về đó, tab **SSL** của website có lựa chọn **Also \*.example.com (wildcard)**. Tích chọn rồi bấm **Issue certificate**: ZoPanel ghi bản ghi TXT vào chính zone của nó, nên không có API key bên thứ ba nào phải lưu. Chứng chỉ phủ `example.com` và `*.example.com`; các alias đã được wildcard phủ như `www` bị bỏ khỏi đơn vì Let's Encrypt từ chối tên trùng lặp. Lần gia hạn giữ nguyên wildcard và tự chạy, có cảnh báo nếu gia hạn thất bại ([tài liệu SSL](/vi/docs/ssl)).

Trên cùng zone đó, bạn bật **DNSSEC** bằng một công tắc; ZoPanel hiển thị bản ghi DS để khai báo ở nhà đăng ký, còn [tài liệu DNS](/vi/docs/dns) ghi rõ thứ tự an toàn khi tắt. Zone mới cũng có sẵn bản ghi CAA chỉ cho phép Let's Encrypt.

Hạn chế cần nói rõ: ZoPanel không cấp wildcard qua API DNS của Cloudflare hay nhà cung cấp khác. Nếu zone vẫn ở Cloudflare, ZoPanel từ chối yêu cầu wildcard và chỉ bạn sang trang DNS; khi đó hãy dùng Cloudflare Origin certificate như trong bài [dùng Cloudflare với VPS](/vi/blog/cloudflare-with-vps). Để chạy nameserver riêng, xem bài [tạo private nameserver](/vi/blog/private-nameservers), và trang [tính năng DNS](/vi/features/dns) để biết toàn bộ công cụ DNS.

## Kết luận

Lấy SSL wildcard miễn phí từ Let's Encrypt là bài toán DNS nhiều hơn là bài toán chứng chỉ. Hãy xin cả tên miền gốc và `*.example.com`, tự động tạo TXT bằng API token giới hạn quyền, ủy quyền CNAME hoặc DNS trên cùng server, và chắc chắn nó chạy được ở mọi lần gia hạn, vì thời hạn và thời gian dùng lại xác thực đều giảm từ tháng 2/2027. Nếu ký zone bằng DNSSEC, hãy giữ bản ghi DS luôn khớp, vì chữ ký lỗi sẽ chặn việc cấp chứng chỉ.

Để thử chứng chỉ wildcard và DNSSEC mà không phải nối API, [gói Free của ZoPanel](/vi/pricing) có sẵn DNS server, SSL wildcard và DNSSEC cho 3 tài khoản hosting, 10 website, không giới hạn thời gian.

## Câu hỏi thường gặp

### Chứng chỉ wildcard của Let's Encrypt có thật sự miễn phí không?

Có. Let's Encrypt không thu phí cho bất kỳ chứng chỉ nào, kể cả wildcard. Chi phí nằm ở vận hành: bạn cần cơ chế tự động tạo bản ghi TXT cho mỗi lần gia hạn.

### Wildcard có phủ tên miền chính không?

Không. `*.example.com` phủ các tên ngay dưới `example.com` một cấp, không phủ chính `example.com` và không phủ tên sâu hơn như `a.b.example.com`. Hãy xin `example.com` và `*.example.com` trên cùng một chứng chỉ.

### Có lấy wildcard bằng xác thực HTTP được không?

Không. Tài liệu Let's Encrypt ghi rõ HTTP-01 không dùng được cho chứng chỉ wildcard. Chỉ DNS-01 làm được.

### DNSSEC có làm hỏng Let's Encrypt không?

DNSSEC đúng thì không; nó còn làm việc xác thực đáng tin hơn. DNSSEC sai thì có: nếu chữ ký hoặc bản ghi DS sai, truy vấn của Let's Encrypt trả về SERVFAIL và chứng chỉ không được cấp. Hãy kiểm tra zone bằng công cụ debug DNSSEC trước khi xin chứng chỉ.

### Chứng chỉ wildcard gia hạn bao lâu một lần?

Hiện tại thường 60 ngày một lần với chứng chỉ 90 ngày. Từ 10/2/2027 thời hạn mặc định giảm còn 64 ngày và từ 16/2/2028 còn 45 ngày, nên gia hạn sẽ dày hơn. Hãy để client lên lịch theo ngày hết hạn thực tế hoặc ARI, không theo chu kỳ cố định.
