Chứng chỉ SSL do Let’s Encrypt cấp có hạn 90 ngày. Bài này hướng dẫn gia hạn cho một máy chủ Nextcloud, kiểm xem việc gia hạn tự động có đang chạy không, và xử lý khi nó không chạy.
1. Trước tiên: kiểm chứng chỉ còn bao nhiêu ngày
Đăng nhập vào máy chủ qua SSH rồi chạy:
sudo certbot certificates
Lệnh này liệt kê mọi chứng chỉ trên máy, kèm tên miền và ngày hết hạn.
Hoặc kiểm từ bên ngoài, không cần đăng nhập:
echo | openssl s_client -connect <ten-mien-cua-ban>:443 -servername <ten-mien-cua-ban> 2>/dev/null \
| openssl x509 -noout -dates
2. Việc quan trọng nhất: kiểm gia hạn tự động
Certbot tự cài sẵn một tác vụ hẹn giờ lúc cài đặt. Nếu nó đang chạy thì quý Khách hàng không phải làm gì cả, và phần lớn trường hợp là như vậy.
Kiểm bộ hẹn giờ của hệ thống:
systemctl list-timers | grep certbot
Có dòng trả về nghĩa là tác vụ đã được đặt. Nếu không, kiểm cách còn lại:
sudo ls -l /etc/cron.d/certbot
Chạy thử việc gia hạn mà không đổi gì thật:
sudo certbot renew --dry-run
Ra Congratulations, all simulated renewals succeeded nghĩa là mọi thứ sẵn sàng, tới hạn nó sẽ tự gia hạn. Đây là lệnh đáng chạy một lần mỗi vài tháng.
3. Gia hạn bằng tay
Khi cần gia hạn ngay, không chờ tác vụ tự động:
sudo certbot renew
Lệnh này chỉ gia hạn những chứng chỉ còn dưới 30 ngày. Chứng chỉ còn nhiều ngày sẽ bị bỏ qua, đó là hành vi đúng.
Muốn ép gia hạn dù còn hạn:
sudo certbot renew --force-renewal
⚠️ Đừng dùng --force-renewal theo thói quen. Let’s Encrypt giới hạn số lần cấp chứng chỉ cho một tên miền trong một tuần. Ép gia hạn nhiều lần sẽ chạm giới hạn đó, và lúc thật sự cần thì không cấp được nữa.
4. Cấp chứng chỉ lần đầu
Nếu máy chưa từng có chứng chỉ, chọn lệnh theo máy chủ web đang chạy:
# Apache
sudo certbot --apache -d <ten-mien-cua-ban>
# Nginx
sudo certbot --nginx -d <ten-mien-cua-ban>
Certbot tự sửa cấu hình máy chủ web và tự nạp lại cấu hình.
Nếu Nextcloud chạy trong container và máy chủ web nằm ngoài, dùng cách xác thực qua thư mục web:
sudo certbot certonly --webroot -w /duong/dan/toi/thu-muc-web -d <ten-mien-cua-ban>
5. Sau khi gia hạn: nạp lại cấu hình
Chứng chỉ mới chỉ có tác dụng khi máy chủ web đọc lại nó.
sudo systemctl reload apache2 # Apache tren Ubuntu, Debian
sudo systemctl reload nginx # Nginx
Certbot thường tự làm việc này. Nếu không, thêm vào để lần sau tự chạy:
sudo certbot renew --deploy-hook "systemctl reload nginx"
6. Ba lỗi hay gặp
a. Cổng 80 bị chặn. Let’s Encrypt xác thực bằng cách gọi vào tên miền qua cổng 80. Cổng đó đóng thì không cấp được, kể cả khi website chỉ chạy trên cổng 443.
sudo ss -tlnp | grep ':80'
b. Tên miền không trỏ về máy này. Kiểm địa chỉ tên miền đang trỏ tới, so với địa chỉ thật của máy:
dig +short <ten-mien-cua-ban>
curl -s ifconfig.me
Hai giá trị phải khớp nhau.
c. Chạm giới hạn cấp phát. Thông báo có chữ too many certificates hoặc rate limit. Chờ hết chu kỳ giới hạn, và trong lúc chờ đừng thử lại liên tục, vì mỗi lần thử lại kéo dài thời gian chờ.
7. Riêng với Nextcloud
Sau khi đổi chứng chỉ, nếu Nextcloud báo cảnh báo về kết nối không an toàn trong mục kiểm tra cấu hình, kiểm hai thứ:
- Giá trị
overwriteprotocoltrong tệp cấu hìnhconfig/config.phpnên làhttpskhi Nextcloud nằm sau một lớp proxy. - Xoá bộ nhớ đệm của trình duyệt rồi tải lại, vì trình duyệt giữ chứng chỉ cũ một lúc.
Ứng dụng đồng bộ trên máy tính và điện thoại thường tự nhận chứng chỉ mới, không phải cấu hình lại.
8. Việc nên làm định kỳ
| Việc | Nhịp |
|---|---|
sudo certbot renew --dry-run |
Mỗi quý một lần |
Xem ngày hết hạn bằng certbot certificates |
Mỗi quý một lần |
| Đặt cảnh báo khi chứng chỉ còn dưới 14 ngày | Một lần, rồi để hệ thống giám sát lo |
Hàng cuối đáng làm nhất. Chứng chỉ hết hạn là loại sự cố báo trước 90 ngày mà vẫn hay xảy ra, chỉ vì không ai được nhắc.
9. Khi cần hỗ trợ
Quý Khách hàng đang dùng Cloudzone Drive thì không phải tự gia hạn, Cloudzone lo phần đó.
Nếu quý Khách hàng tự dựng Nextcloud trên máy chủ ảo tại Cloudzone và gặp vướng, hãy nhắn qua khung chat ở góc phải màn hình, kèm tên miền và nguyên văn thông báo lỗi.