Let’s Encrypt là một Tổ chức cấp phát chứng chỉ (CA – Certificate Authority) cung cấp giải pháp đơn giản và miễn phí để cài đặt các chứng chỉ TLS/SSL, giúp website của bạn an toàn với giao thức HTTPS được mã hóa. Họ cũng cung cấp một công cụ mạnh mẽ – Certbot – giúp tự động hóa toàn bộ quá trình từ cài đặt đến cấu hình chứng chỉ. Hiện nay, việc lấy và cài chứng chỉ SSL hoàn toàn có thể tự động trên cả Apache và Nginx.
Trong hướng dẫn này, bạn sẽ học cách dùng Certbot để nhận chứng chỉ SSL miễn phí cho Nginx trên Ubuntu, đồng thời thiết lập để chứng chỉ tự động gia hạn.
Trong hướng dẫn này, chúng ta sẽ sử dụng một tệp cấu hình riêng biệt cho Nginx thay vì chỉnh sửa trực tiếp tệp cấu hình mặc định. Việc tạo một server block mới cho từng domain riêng biệt được khuyến nghị vì nó giúp tránh các lỗi cấu hình phổ biến và đồng thời giữ nguyên tệp mặc định như một bản dự phòng an toàn khi cần thiết.
💡 Chúng ta sẽ sử dụng một tệp cấu hình riêng cho từng domain thay vì sửa đổi cấu hình mặc định của Nginx – điều này giúp bạn tránh sai sót và dễ dàng kiểm soát.
Mục Lục
- Cài đặt Certbot
- Xác nhận cấu hình của Nginx
- Mở cổng HTTPS trên tường lửa
- Lấy chứng chỉ SSL
- Kiểm tra quá trình tự động gia hạn của Certbot
Yêu Cầu Chuẩn Bị
Để theo dõi hướng dẫn này, bạn cần:
- Một máy chủ Ubuntu được thiết lập theo hướng dẫn “Thiết Lập Máy Chủ Ban Đầu với Ubuntu 22.04”, bao gồm một user không phải root có quyền
sudo
và tường lửa hoạt động. - Một tên miền đã đăng ký. Trong hướng dẫn này, chúng tôi sử dụng
example.com
. Bạn có thể mua tên miền từ Namecheap, lấy miễn phí với Freenom hoặc sử dụng nhà đăng ký mà bạn ưa thích. - Hai bản ghi DNS được thiết lập cho máy chủ của bạn. Nếu bạn sử dụng DataOnline, hãy xem tài liệu DNS của chúng tôi để biết cách thêm các bản ghi.
- Một bản ghi A cho
example.com
trỏ tới địa chỉ IP công khai của máy chủ. - Một bản ghi A cho
www.example.com
trỏ tới địa chỉ IP công khai của máy chủ.
- Một bản ghi A cho
- Nginx được cài đặt theo hướng dẫn “Cách Cài Đặt Nginx trên Ubuntu 22.04”. Đảm bảo rằng bạn đã tạo một server block cho domain của mình (hướng dẫn này sử dụng ví dụ tại
/etc/nginx/sites-available/example.com
).
Bước 1 – Cài Đặt Certbot
Certbot khuyến nghị cài đặt bằng snap package. Các gói snap hoạt động trên hầu hết các bản phân phối Linux, nhưng bạn cần cài đặt trước snapd để quản lý các gói snap. Ubuntu đã hỗ trợ snap ngay từ đầu, vì vậy bạn có thể bắt đầu bằng cách cập nhật snap core:
sudo snap install core; sudo snap refresh core
Nếu bạn đang làm việc trên một máy chủ trước đó đã cài phiên bản certbot cũ, hãy gỡ bỏ nó trước:
sudo apt remove certbot
Sau đó, cài đặt gói certbot:
sudo snap install --classic certbot
Cuối cùng, tạo liên kết từ lệnh certbot trong thư mục cài snap vào đường dẫn hệ thống, để bạn có thể chạy certbot chỉ bằng cách gõ tên lệnh:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Giờ đây, sau khi đã cài đặt Certbot, hãy chạy nó để lấy chứng chỉ.
Bước 2 – Xác Nhận Cấu Hình của Nginx
Certbot cần tìm được server block đúng trong cấu hình Nginx của bạn để có thể tự động cấu hình SSL. Cụ thể, nó tìm kiếm chỉ thị server_name
khớp với tên miền mà bạn yêu cầu chứng chỉ.
Nếu bạn đã thực hiện bước tạo server block trong hướng dẫn cài đặt Nginx, bạn sẽ có một server block cho tên miền của mình với chỉ thị server_name
đã được thiết lập chính xác.
Để kiểm tra, mở tệp cấu hình của domain bằng nano (hoặc trình soạn thảo ưa thích của bạn):
... server_name example.com www.example.com; ...
Nếu đã đúng, thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo. Nếu chưa, hãy cập nhật cho khớp, sau đó lưu tệp, thoát trình soạn thảo và kiểm tra cú pháp của các chỉnh sửa:
sudo nginx -t
Nếu có lỗi, hãy mở lại file server block và kiểm tra lại các ký tự bị thiếu hoặc sai. Khi cú pháp file cấu hình đã đúng, tải lại Nginx để áp dụng cấu hình mới:
sudo systemctl reload nginx
Bây giờ, Certbot có thể tìm thấy server block đúng và tự động cập nhật cấu hình.
Tiếp theo, chúng ta sẽ cập nhật tường lửa để cho phép lưu lượng HTTPS.
Bước 3 – Cho Phép Lưu Lượng HTTPS Qua Tường Lửa
Nếu bạn đang sử dụng tường lửa ufw theo khuyến nghị trong phần chuẩn bị, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn thay, khi cài Nginx, nó đã đăng ký một vài profile với ufw.
Để xem trạng thái hiện tại của tường lửa, gõ:
sudo ufw status
Có thể bạn sẽ thấy trạng thái như sau (chỉ cho phép HTTP):
sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'
Kiểm tra lại trạng thái tường lửa:
sudo ufw status
Kết quả mong đợi:
Bước 4 – Lấy Chứng Chỉ SSL
Certbot cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin. Plugin Nginx sẽ tự động cấu hình lại Nginx và tải lại cấu hình khi cần. Để sử dụng plugin này, hãy gõ:
sudo certbot --nginx -d example.com -d www.example.com
Lệnh trên chạy Certbot với plugin --nginx
, sử dụng tham số -d
để chỉ định tên miền mà bạn muốn chứng chỉ có hiệu lực.
Khi chạy lệnh, bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với điều khoản dịch vụ. Sau khi hoàn tất, bạn sẽ nhận được thông báo cho biết quá trình thành công và vị trí lưu trữ chứng chỉ:
Bước 5 – Kiểm Tra Tự Động Gia Hạn Certbot
Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Điều này nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ. Gói certbot mà chúng ta đã cài đặt sẽ xử lý việc này bằng cách thêm một systemd timer chạy hai lần mỗi ngày để tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày trước khi hết hạn.
Để kiểm tra trạng thái của timer, gõ:
sudo systemctl status snap.certbot.renew.service
Kết quả hiển thị sẽ như sau:
sudo certbot renew --dry-run
Nếu không có lỗi nào được hiển thị, bạn đã thiết lập xong. Khi cần, Certbot sẽ tự động gia hạn chứng chỉ và tải lại Nginx để áp dụng các thay đổi. Nếu quá trình gia hạn tự động gặp vấn đề, Let’s Encrypt sẽ gửi thông báo qua email mà bạn đã đăng ký, cảnh báo khi chứng chỉ sắp hết hạn.
Kết luận
Trong hướng dẫn này, bạn đã hoàn thành toàn bộ quy trình: cài đặt công cụ Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL miễn phí cho tên miền của bạn, cấu hình Nginx để sử dụng các chứng chỉ này, và thiết lập hệ thống tự động gia hạn chứng chỉ.
Nếu bạn còn bất kỳ thắc mắc nào về cách sử dụng Certbot, hãy bắt đầu khám phá thêm tại tài liệu chính thức của Certbot – đó sẽ là nguồn tham khảo tuyệt vời dành cho bạn.