Như đã nói, Let’s Encrypt đã cho ra mắt wildcard SSL. Điều này giúp chúng ta nhàn hơn khá nhiều trong việc quản lý certificate. Wildcard SSL nghĩa là bạn chỉ cần 1 chứng chỉ duy nhất sử dụng cho mọi subdomain. VD *.hoctapit.com sẽ dùng được cho mọi tên miền cấp 2 của hoctapit.com như chemgio.hoctapit.com, xxx.hoctapit.com…
Lưu ý: không áp dụng cho chính tên miền hoctapit.com và tên miền cấp 3 dạng abc.xxx.hoctapit.com nhé. Với tên miền cấp 3 bạn cần phải đăng ký wildcard cho *.xxx.hoctapit.com
Tạo wildcard SSL không khó, các bạn có thể tham khảo ở trang hocvps.com
Tuy nhiên do mỗi lần tạo/gia hạn nó yêu cầu trỏ 1 bản ghi TXT để xác thực qua dns challenge nên không thể gia hạn tự động được. Để gia hạn tự động chúng ta cần Trang quản lý tên miền cấp DNS API. Tuy nhiên đa số không cung cấp cái này, nhất là mấy nhà quản lý tên miền Việt Nam, nên chúng ta sẽ phải trỏ tên miền qua Cloudflare. Mà thật ra nên trỏ qua Cloudflare dù có dùng wildcard ssl hay không vì nó có rất nhiều lợi thế như: miễn phí, cập nhật bản ghi siêu nhanh, chưa kể 1 loạt tính năng ngon nghẻ khác như CDN miễn phí…
Cách trỏ tên miền qua Cloudflare các bạn tìm tạm trên mạng nhé vì mình chưa có thời gian viết. Bây giờ mình chỉ hướng dẫn tạo wildcard SSL qua Dns Api của Cloudflare. Tạo thì có nhiều client nhưng mình sẽ dùng Certbot, đây là công cụ Official của Letsencrypt.
1. Cài certbot
Ngay trang chủ của nó đây đã hướng dẫn đầy đủ rồi: https://certbot.eff.org/
Của mình là dùng nginx và Centos 7 nên sẽ dùng câu lệnh:
sudo yum install certbot-nginx
Nếu bạn đã cài certbot rồi thì cần update nó lên bản mới nhất (bản 0.22 mới hỗ trợ wildcard)
sudo yum update certbot
Cài thêm Plugin certbot-dns-cloudflare
sudo pip install certbot-dns-cloudflare
2. Lấy DNS API cloudflare
Đăng nhập vào CF, góc trên bấm vào Email, chọn My profile
Kéo xuống dưới phần API Key, bấm View cái Global API key lên, copy nó.
Trên server bạn tạo 1 file cloudflare.ini với nội dung như sau:
# Cloudflare API credentials used by Certbot dns_cloudflare_email = dangkiena3@gmail.com dns_cloudflare_api_key = 4c2290840f72afb176fd1ec2234ss5bfd52c987
Với email là email bạn dùng đăng ký Cloudflare, API là đoạn đã copy ở bước trên.
Lưu ý: file này chứa thông tin nhạy cảm nên cần bảo mật nó nếu server có nhiều người truy cập.
3. Tạo wildcard SSL
Câu lệnh như sau:
sudo certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials /home/kiennd/cloudflare.ini \ --server https://acme-v02.api.letsencrypt.org/directory \ -d *.hoctapit.com -d hoctapit.com
Lưu ý đường dẫn tới file cloudflare.ini
Nó sẽ hỏi bạn mấy cái như email, có đồng ý hay không bla bla thì chỉ cần gõ đồng ý là được.
Ở đây mình issue cho 2 domain là *.hoctapit.com và hoctapit.com lý do bởi wildcard SSL này không dùng được cho domain chính (hơi dị, chắc đây là lỗi và Letsencrypt họ sẽ khắc phục trong các phiên bản sau.
Như vậy là OK, config nginx (apache, haproxy…) như bình thường. Lưu ý cert sẽ lưu trong thư mục /etc/letsencrypt/live/hoctapit.com, dùng 1 cert duy nhất này config cho all subdomain, các sub đều trỏ đường dẫn tới file cert này thôi.
Kết quả: https://api.test.hoctapit.com/
Ở đây mình làm với domain *.test.hoctapit.com
4. Gia hạn
Gia hạn thì cứ đơn giản gõ lệnh
sudo certbot renew
Theo khuyến cáo của certbot, nếu đặt cron bạn nên cho nó chạy 2 lần/ngày và chạy vào 1 khung giờ random nào đó để tránh quá tải hệ thống của Letsencrypt:
53 */12 * * * certbot renew --post-hook "systemctl reload nginx" >> /var/log/certbot-renew.log
Ngoài ra, Certbot còn hỗ trợ các DNS API khác như DNS route53 (AWS), DigitalOcean, LuaDNS…