Let’s Encrypt là một nhà cung cấp chứng chỉ (Certificate Authority – CA) cung cấp chứng chỉ TLS/SSL miễn phí, giúp bạn kích hoạt HTTPS với mã hóa trên máy chủ web một cách dễ dàng. Quá trình nhận và cài đặt chứng chỉ được đơn giản hóa nhờ phần mềm khách Certbot, tự động hóa gần như tất cả các bước cần thiết. Hiện nay, việc cài đặt chứng chỉ SSL đã được tự động hóa hoàn toàn trên cả hai máy chủ web Apache và Nginx.
Yêu cầu trước khi bắt đầu
Để làm theo hướng dẫn này, bạn cần:
-
Một máy chủ Ubuntu 18.04 được thiết lập theo hướng dẫn “Cách cài đặt Nginx trên Ubuntu 18.04”, bao gồm một người dùng không phải root có quyền sudo và một Firewall.
-
Một tên miền đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng
your_domain
. Bạn có thể mua tên miền trên Namecheap, nhận miễn phí trên Freenom, hoặc sử dụng nhà đăng ký tên miền mà bạn chọn. -
Hai bản ghi DNS được cấu hình cho máy chủ của bạn. Bạn có thể tham khảo bài giới thiệu về DNS của DataOnline để biết cách thêm bản ghi:
-
Một bản ghi A với
your_domain
trỏ đến địa chỉ IP công khai của máy chủ. -
Một bản ghi A với
www.your_domain
trỏ đến địa chỉ IP công khai của máy chủ.
-
-
Cài đặt Nginx theo hướng dẫn “Cách cài đặt Nginx trên Ubuntu 18.04”. Hãy đảm bảo rằng bạn có một server block cho tên miền của mình. Trong hướng dẫn này, ví dụ được sử dụng là
/etc/nginx/sites-available/your_domain
.
Bước 1 – Cài đặt Certbot
Bước đầu tiên để sử dụng Let’s Encrypt lấy chứng chỉ SSL là cài đặt phần mềm Certbot trên máy chủ của bạn.
Dự án Certbot khuyến nghị hầu hết người dùng cài đặt phần mềm qua snap, một trình quản lý gói ban đầu được phát triển bởi Canonical (công ty đứng sau Ubuntu) và hiện có trên nhiều bản phân phối Linux:
sudo snap install --classic certbot
Kết quả hiển thị sẽ cho biết phiên bản hiện tại của Certbot và thông báo cài đặt thành công:
Output certbot 1.21.0 from Certbot Project (certbot-eff✓) installed
Tiếp theo, tạo một liên kết tượng trưng đến tệp thực thi /snap/bin/certbot
mới cài đặt từ thư mục /usr/bin/
. Điều này đảm bảo rằng lệnh certbot
có thể chạy đúng trên máy chủ:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot đã sẵn sàng sử dụng, nhưng để nó cấu hình SSL cho Nginx, bạn cần xác minh một số cấu hình của Nginx.
Bước 2 – Xác nhận cấu hình của Nginx
Certbot cần có thể tìm đúng server block trong cấu hình Nginx để tự động cấu hình SSL. Cụ thể, nó sẽ tìm dòng server_name
phù hợp với tên miền bạn yêu cầu chứng chỉ.
Nếu bạn đã làm theo bước thiết lập server block được khuyến khích trong hướng dẫn cài đặt Nginx, bạn sẽ có một server block cho tên miền tại /etc/nginx/sites-available/your_domain
với chỉ thị server_name
được thiết lập chính xác.
Để kiểm tra, mở tệp server block của tên miền bằng nano
hoặc trình soạn thảo ưa thích:
sudo nano /etc/nginx/sites-available/your_domain
Tìm dòng server_name
hiện có. Nó nên giống như sau:
... server_name your_domain www.your_domain; ...
Nếu có, thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo.
Nếu không, hãy cập nhật cho khớp, sau đó lưu tệp và thoát khỏi trình soạn thảo. Nếu sử dụng nano, nhấn CTRL + X
rồi nhấn Y
và ENTER
.
Sau đó, xác minh cú pháp các chỉnh sửa trong cấu hình:
sudo nginx -t
Nếu có lỗi, mở lại tệp server block và kiểm tra các lỗi chính tả hoặc ký tự bị thiếu.
Khi cú pháp của tệp 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à cập nhật cấu hình.
Tiếp theo, bạn sẽ cập nhật Firewall để cho phép lưu lượng HTTPS.
Bước 3 – Cho phép HTTPS qua Firewall
Nếu bạn đã kích hoạt Firewall ufw
theo khuyến nghị, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn thay, Nginx đã đăng ký một số profile với ufw khi cài đặt.
Kiểm tra trạng thái hiện tại bằng lệnh:
sudo ufw status
Bạn sẽ nhận được kết quả tương tự như sau, cho thấy chỉ lưu lượng HTTP được phép truy cập máy chủ web:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Để cho phép lưu lượng HTTPS bổ sung, hãy cho phép profile “Nginx Full” và xóa cấu hình cho phép profile “Nginx HTTP” thừa:
sudo ufw allow 'Nginx Full' sudo ufw delete allow 'Nginx HTTP'
Khi chạy lại lệnh sudo ufw status
, kết quả sẽ được cập nhật như sau:
sudo ufw status
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
Tiếp theo, bạn sẽ chạy Certbot để lấy chứng chỉ.
Bước 4 – Nhận 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 thiết. Để sử dụng plugin này, chạy lệnh sau:
sudo certbot --nginx -d your_domain -d your_domain
Lệnh này chạy Certbot
với plugin --nginx
, sử dụng -d
để chỉ định các tên miền mà bạn muốn chứng chỉ có hiệu lực.
Nếu đây là lần đầu tiên bạn chạy Certbot
, 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 đó, Certbot
sẽ liên lạc với máy chủ của Let’s Encrypt để yêu cầu chứng chỉ cho tên miền của bạn. Nếu thành công, bạn sẽ nhận được kết quả sau:
Output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-01-27. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Các chứng chỉ của bạn đã được tải xuống, cài đặt và kích hoạt. Hãy thử tải lại website của bạn sử dụng https://
và quan sát biểu tượng bảo mật trên trình duyệt. Nó sẽ hiển thị rằng trang web đã được bảo mật đúng cách, thường với một biểu tượng ổ khóa màu xanh. Nếu bạn kiểm tra máy chủ của mình bằng công cụ SSL Labs Server Test, nó sẽ nhận được điểm A.
Bây giờ, sau khi lấy được chứng chỉ SSL, bước cuối cùng là kiểm tra quá trình gia hạn tự động.
Bước 5 – Kiểm tra tự động gia hạn của Certbot
Chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong 90 ngày. Mục đích là để khuyến khích người dùng tự động gia hạn chứng chỉ. Gói Certbot
mà bạn đã cài đặt sẽ tự động thực hiện điều này bằng cách thêm một script gia hạn vào /etc/cron.d
. Script này chạy hai lần mỗi ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày đến hạn.
Để kiểm tra quá trình gia hạn, bạn có thể thực hiện một lần chạy thử với Certbot:
sudo certbot renew --dry-run
Nếu không có lỗi xuất hiện, mọi thứ đã sẵn sàng. Khi cần, Certbot sẽ gia hạn chứng chỉ và tải lại Nginx để áp dụng thay đổi. Nếu quá trình gia hạn tự động thất bại, Let’s Encrypt sẽ gửi thông báo đến email bạn đã cung cấp, 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 đã:
-
Cài đặt Certbot để lấy chứng chỉ SSL từ Let’s Encrypt.
-
Cấu hình Nginx để sử dụng các chứng chỉ này.
-
Thiết lập quá trình gia hạn chứng chỉ tự động.
Nếu bạn có thêm bất kỳ câu hỏi nào về việc sử dụng Certbot, tài liệu của Certbot là nơi khởi đầu tốt. Sau khi cấu hình Let’s Encrypt, việc chọn thuê VPS chất lượng sẽ giúp website của bạn vận hành mượt mà và bảo mật. Các dịch vụ VPS uy tín cung cấp tài nguyên dồi dào, hỗ trợ tối ưu cho Nginx, đảm bảo trải nghiệm người dùng tuyệt vời. Tìm hiểu thêm ngay!