Vấn đề
Bạn đã yêu cầu một chứng chỉ SSL/TLS mới thông qua AWS Certificate Manager (ACM). Bạn chọn xác thực DNS vì nó thường nhanh hơn so với việc chờ email quản trị viên. Tuy nhiên, hàng giờ trôi qua và trạng thái vẫn bị kẹt ở Pending validation (Đang chờ xác thực). Cuối cùng, bạn thấy lỗi này:
Validation timed out. The status of this certificate request is Pending validation.
ACM cung cấp cho bạn khoảng thời gian 72 giờ để cấu hình các bản ghi DNS chính xác. Nếu AWS không thể tìm thấy bản ghi CNAME cụ thể mà nó đang tìm kiếm trong khung thời gian đó, yêu cầu sẽ thất bại. Hầu hết các trường hợp, cách khắc phục chỉ đơn giản là điều chỉnh cấu hình DNS của bạn.
Các nguyên nhân phổ biến
- Bản ghi "ma" (Ghost Records): Bạn đã thêm bản ghi CNAME vào sai nhà cung cấp DNS. Điều này thường xảy ra nếu tên miền của bạn được đăng ký tại GoDaddy nhưng Name Servers (NS) lại trỏ về Route 53.
- Bẫy tên miền phụ (Subdomain): Nhiều nhà cung cấp DNS tự động thêm tên miền của bạn vào sau. Nếu bạn dán
_x.example.comvào trường 'Host', nó có thể được phân giải thành_x.example.com.example.com, khiến ACM không nhận diện được. - Chặn bởi CAA: Bản ghi Certificate Authority Authorization (CAA) tồn tại trong DNS của bạn nhưng không liệt kê Amazon là nhà cấp phát được ủy quyền.
- Proxy của Cloudflare: Chế độ 'Đám mây màu cam' (Orange Cloud) đang hoạt động trên bản ghi xác thực, che khuất đích đến CNAME mà ACM cần thấy.
Giải pháp 1: Cách khắc phục 'Hai cú nhấp chuột' cho Route 53
Nếu Route 53 quản lý DNS của bạn, đừng nhập bất cứ thứ gì thủ công. AWS có thể tự động xử lý các thiết lập ngầm cho bạn. Đây là phương pháp đáng tin cậy nhất vì nó loại bỏ các lỗi do sao chép và dán.
- Truy cập ACM Console và mở chứng chỉ đang chờ xử lý của bạn.
- Tìm phần Domains và nhấp vào Create records in Route 53.
- Xác nhận hosted zone và nhấn Create records.
AWS sẽ chèn bản ghi CNAME _x.yourdomain.com vào zone của bạn ngay lập tức. Quá trình xác thực thường chuyển sang trạng thái 'Issued' (Đã cấp phát) trong vòng 5 đến 15 phút.
Giải pháp 2: Xử lý với các nhà cung cấp bên ngoài (GoDaddy, Cloudflare, v.v.)
Khi sử dụng trình quản lý DNS bên ngoài, bạn phải thực hiện chính xác. Hầu hết các nhà cung cấp chỉ yêu cầu phần tên miền phụ (subdomain) của tên CNAME.
- Trường "Host": Nếu ACM cung cấp
_a1b2c3d4.example.com, hãy thử chỉ nhập_a1b2c3d4vào ô 'Name' hoặc 'Host' của nhà cung cấp. - Cài đặt Cloudflare: Đảm bảo bản ghi được đặt ở chế độ DNS Only (Đám mây màu xám). Quá trình xác thực ACM sẽ thất bại nếu Cloudflare cố gắng proxy lưu lượng xác thực.
- TTL: Đặt TTL của bạn thành 300 giây (5 phút) trong quá trình thiết lập. Điều này đảm bảo rằng nếu bạn mắc lỗi, bạn sẽ không phải đợi cả tiếng đồng hồ để bộ nhớ đệm (cache) được xóa.
Giải pháp 3: Giải quyết xung đột bản ghi CAA
Bản ghi CAA hoạt động như một nhân viên bảo vệ cho tên miền của bạn, cho thế giới biết CA nào được phép cấp chứng chỉ cho bạn. Nếu bản ghi CAA tồn tại nhưng không bao gồm Amazon, ACM không thể cấp chứng chỉ. Kiểm tra các bản ghi của bạn bằng công cụ dig:
dig example.com CAA
Nếu bạn thấy các bản ghi cho Let's Encrypt hoặc DigiCert nhưng không có bản ghi nào cho Amazon, bạn phải thêm một bản ghi. Chèn bản ghi này vào DNS zone của bạn:
example.com. IN CAA 0 issue "amazon.com"
Giải pháp 4: Xác minh bằng 'dig' trước khi chờ đợi
Đừng đợi 72 giờ để xem nó có hoạt động hay không. Bạn có thể xác minh bản ghi đã hoạt động ngay bây giờ từ terminal của mình. Thay thế giá trị bên dưới bằng tên CNAME mà ACM đã cung cấp cho bạn:
dig CNAME _xxxxxxxxxxxx.yourdomain.com +short
Nếu lệnh trả về một giá trị kết thúc bằng .acm-validations.aws., bạn đã thành công. Nếu nó không trả về gì, DNS của bạn chưa được cập nhật hoặc tên bản ghi bị viết sai chính tả.
Xác minh
Sau khi các bản ghi đã hoạt động và các bản ghi CAA đã rõ ràng, ACM sẽ tự động phát hiện thay đổi. Bạn không cần phải làm mới hoặc gửi lại yêu cầu. Để kiểm tra trạng thái qua CLI, hãy chạy:
aws acm describe-certificate --certificate-arn your_cert_arn --query 'Certificate.Status'
Bạn đang tìm kiếm một kết quả đầu ra đơn giản gồm một từ:
"ISSUED"
Mẹo chuyên nghiệp: Tự động hóa với Terraform
Việc nhấp vào các nút trong bảng điều khiển (console) một cách thủ công rất dễ xảy ra sai sót. Hãy sử dụng Infrastructure as Code (Hạ tầng dưới dạng mã) để liên kết ACM và Route 53. Đoạn mã Terraform này tạo chứng chỉ, thiết lập bản ghi DNS và đợi quá trình xác thực hoàn tất trước khi đánh dấu tài nguyên là đã xong.
resource "aws_acm_certificate" "cert" {
domain_name = "example.com"
validation_method = "DNS"
}
resource "aws_route53_record" "validation" {
for_each = {
for dvo in aws_acm_certificate.cert.domain_validation_options : dvo.domain_name => {
name = dvo.resource_record_name
record = dvo.resource_record_value
type = dvo.resource_record_type
}
}
allow_overwrite = true
name = each.value.name
records = [each.value.record]
ttl = 60
type = each.value.type
zone_id = data.aws_route53_zone.main.zone_id
}

