Let’s Encrypt là một Certificate Authority (CA) cung cấp cách tiếp cận dễ dàng để lấy và cài đặt chứng chỉ TLS/SSL miễn phí, từ đó cho phép HTTPS được mã hóa trên các máy chủ web. Nó đơn giản hóa quy trình bằng cách cung cấp một phần mềm khách, Certbot, cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện nay, toàn bộ quá trình lấy và cài đặt chứng chỉ đã được tự động hoàn toàn trên cả Apache và Nginx.
Để triển khai Nginx và Let’s Encrypt hiệu quả, bạn cần một VPS ổn định. Với VPS giá rẻ từ các nhà cung cấp uy tín, bạn dễ dàng thiết lập máy chủ an toàn, tiết kiệm chi phí mà vẫn đảm bảo hiệu suất cao. Khám phá ngay các gói VPS phù hợp!
Trong hướng dẫn này, bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Nginx trên Rocky Linux 9 và thiết lập để chứng chỉ được tự động gia hạn.
Hướng dẫn này sẽ sử dụng một tệp cấu hình máy chủ Nginx riêng thay vì tệp mặc định. Bạn nên tạo các tệp server block mới cho từng domain vì cách này giúp tránh các sai sót phổ biến và giữ các tệp mặc định làm cấu hình dự phòng.
Yêu cầu tiên quyết
Để làm theo hướng dẫn này, bạn cần:
● Một máy chủ Rocky Linux 9 được thiết lập theo hướng dẫn “Cài đặt máy chủ ban đầu với Rocky Linux 9”, bao gồm tài khoản người dùng không phải root có quyền sudo và firewall.
● Một tên miền đã được đăng ký. Hướng dẫn này sẽ sử dụng example.com
làm ví dụ. 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ý tên miền bạn ưa thích.
● Cần thiết lập cả hai bản ghi DNS 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 DataOnline để biết cách thêm các bản ghi này.
● Một bản ghi A với example.com
trỏ đến địa chỉ IP công cộng của máy chủ.
● Một bản ghi A với www.example.com
trỏ đến địa chỉ IP công cộng của máy chủ.
● Nginx đã được cài đặt theo hướng dẫn “Cách cài đặt Nginx trên Rocky Linux 9”. Hãy chắc chắn rằng bạn đã có server block cho domain của bạn. Hướng dẫn này sẽ sử dụng /etc/nginx/sites-available/example.com
làm ví dụ.
Khi đã sẵn sàng, hãy đăng nhập với tài khoản người dùng không phải root để bắt đầu.
Bước 1 – Cài đặt Certbot
Đầu tiên, bạn cần cài đặt gói phần mềm Certbot. Đăng nhập vào máy Rocky Linux 9 với tư cách người dùng không phải root:
ssh sammy@your_server_ip
Gói certbot không có sẵn trong trình quản lý gói mặc định. Bạn cần kích hoạt kho lưu trữ EPEL để cài đặt Certbot.
Để thêm kho EPEL cho Rocky Linux 9, chạy lệnh sau:
sudo dnf install epel-release
Khi được nhắc, nhập y để xác nhận cài đặt.
Bây giờ, bạn đã có quyền truy cập vào kho mở rộng, cài đặt tất cả các gói cần thiết:
sudo dnf install certbot python3-certbot-nginx
Lệnh trên sẽ cài đặt Certbot và plugin Nginx cho Certbot, cần thiết để chạy chương trình. Quá trình cài đặt có thể yêu cầu nhập GPG key, hãy xác nhận để tiếp tục.
Giờ đã cài đặt xong Certbot, chúng ta tiến hành chạy Certbot để lấy chứng chỉ.
Bước 2 – Xác nhận cấu hình Nginx
Certbot cần tìm đúng server block trong cấu hình Nginx để có thể tự động cấu hình SSL. Cụ thể, nó sẽ tìm chỉ thị server_name
khớp với domain bạn yêu cầu chứng chỉ.
Nếu bạn đã làm theo bước thiết lập server block trong hướng dẫn cài đặt Nginx, bạn sẽ có server block cho domain tại /etc/nginx/conf.d/example.com
với chỉ thị server_name
được cấu hình đúng.
Để kiểm tra, mở tệp cấu hình của domain bằng nano hoặc trình soạn thảo yêu thích:
sudo nano /etc/nginx/conf.d/example.com
Tìm dòng server_name
có dạng:
... server_name example.com www.example.com; ...
Nếu tệp đã có dòng đó, lưu và thoát, rồi kiểm tra cú pháp:
sudo nginx -t
Nếu có lỗi, mở lại tệp server block và sửa lại. Sau khi cú pháp đúng, tải lại Nginx:
sudo systemctl reload nginx
Certbot bây giờ đã có thể tìm thấy server block phù hợp và tự động cập nhật cấu hình.
Tiếp theo, cập nhật firewall để cho phép lưu lượng HTTPS.
Bước 3 – Cập nhật quy tắc firewall
Vì cấu hình ban đầu của bạn đã bật firewalld, bạn cần điều chỉnh cài đặt firewall để cho phép kết nối đến máy chủ Nginx.
Để kiểm tra các dịch vụ đã được bật, chạy lệnh:
sudo firewall-cmd --permanent --list-all
Bạn sẽ nhận được output như sau:
Nếu không thấy dịch vụ http, bật nó bằng:
sudo firewall-cmd --permanent --add-service=http
Để cho phép lưu lượng https, chạy lệnh:
sudo firewall-cmd --permanent --add-service=https
Để áp dụng thay đổi, tải lại firewall:
sudo firewall-cmd --reload
Giờ máy chủ của bạn đã mở cho lưu lượng https, sẵn sàng chạy Certbot để lấy chứng chỉ.
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 thiết. Để sử dụng plugin này, chạy lệnh:
sudo certbot --nginx -d example.com -d www.example.com
Lệnh này chạy Certbot với plugin –nginx, sử dụng tham số -d để chỉ định các domain cần chứng chỉ. Khi chạy lệnh, bạn sẽ được yêu cầu nhập địa chỉ email và chấp nhận các điều khoản dịch vụ. Sau đó, bạn sẽ nhận được thông báo rằng quá trình thành công cùng với vị trí lưu trữ chứng chỉ:
Ouput
Chứng chỉ của bạn đã được tải xuống, cài đặt và nạp, và cấu hình Nginx sẽ tự động chuyển hướng tất cả các yêu cầu web sang https://. Hãy thử tải lại trang web và kiểm tra biểu tượng bảo mật trên trình duyệt (thường là biểu tượng ổ khóa). Nếu bạn kiểm tra máy chủ bằng SSL Labs Server Test, nó sẽ được đánh giá A.
Giờ, hãy 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 có hiệu lực 90 ngày, nhưng khuyến nghị gia hạn sau 60 ngày để có khoảng thời gian dự phòng. Certbot có lệnh renew tự động kiểm tra các chứng chỉ hiện có và gia hạn nếu chứng chỉ sắp hết hạn (trong vòng 30 ngày).
Để thử nghiệm gia hạn tự động, chạy lệnh:
sudo certbot renew --dry-run
Output
Để đảm bảo chứng chỉ của bạn luôn được cập nhật, bạn có thể tạo một cron job chạy lệnh gia hạn tự động định kỳ. Vì lệnh renew chỉ thực hiện gia hạn khi chứng chỉ còn dưới 30 ngày đến hạn, bạn có thể tạo cron job chạy hàng tuần hoặc hàng ngày.
Chỉnh sửa crontab cho người dùng root bằng:
sudo crontab -e
Trình soạn thảo sẽ mở tệp crontab mặc định (hiện đang trống). Nhập chế độ chèn bằng cách nhấn i và thêm dòng sau:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
Khi bạn hoàn tất, nhấn ESC để thoát khỏi chế độ chèn, sau đó nhập :wq và nhấn ENTER để lưu và thoát khỏi tệp. Để tìm hiểu thêm về trình soạn thảo văn bản Vi và phiên bản kế nhiệm Vim, hãy xem hướng dẫn của chúng tôi về Cài đặt và sử dụng trình soạn thảo Vim trên máy chủ đám mây.
Lệnh trên sẽ tạo một công việc cron mới, chạy vào trưa và nửa đêm mỗi ngày. Dòng lệnh python -c 'import random; import time; time.sleep(random.random() * 3600)'
sẽ chọn một phút ngẫu nhiên trong giờ để thực hiện nhiệm vụ gia hạn.
Lệnh renew của Certbot sẽ kiểm tra tất cả các chứng chỉ SSL đã cài đặt trên hệ thống và cập nhật bất kỳ chứng chỉ nào sắp hết hạn trong vòng 30 ngày. Tùy chọn --quiet
giúp Certbot không hiển thị thông tin hoặc yêu cầu nhập liệu từ người dùng.
Bạn có thể tìm hiểu thêm thông tin chi tiết về quá trình gia hạn trong tài liệu chính thức của Certbot.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL cho tên miền của mình và thiết lập tự động gia hạn chứng chỉ. Nếu bạn có bất kỳ câu hỏi nào về việc sử dụng Certbot, hãy tham khảo tài liệu chính thức của Certbot.
Bạn cũng nên thường xuyên kiểm tra blog chính thức của Let’s Encrypt để cập nhật những thông tin quan trọng. Việc cấu hình SSL trên Nginx yêu cầu máy chủ đáng tin cậy. Thuê VPS chất lượng giúp bạn vận hành website mượt mà, hỗ trợ bảo mật tối ưu với Let’s Encrypt. Tìm hiểu các dịch vụ VPS uy tín để nâng cấp hệ thống của bạn ngay hôm nay!