Let’s Encrypt là một Certificate Authority (CA) mới cung cấp cách để nhận và cài đặt chứng chỉ TLS/SSL miễn phí, từ đó kích hoạt HTTPS được mã hóa trên máy chủ web. Dịch vụ này đơn giản hóa quy trình thông qua việc 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 nhận và cài đặt chứng chỉ được tự động hoàn toàn trên cả máy chủ Apache và Nginx.
Trong bài hướng dẫn này, chúng ta sẽ cùng tìm hiểu cách sử dụng Certbot – khách Let’s Encrypt – để nhận một chứng chỉ SSL miễn phí và sử dụng nó với Nginx trên CentOS 7. Chúng ta cũng sẽ tìm hiểu cách thiết lập việc tự động gia hạn chứng chỉ SSL.
Yêu cầu tiên quyết
Trước khi theo dõi bài hướng dẫn này, bạn cần chuẩn bị các thứ sau:
- ● Một máy chủ CentOS 7 với một tài khoản không phải root có quyền sudo. Bạn có thể tìm hiểu cách tạo tài khoản này theo các bước 1-3 trong bài hướng dẫn Thiết Lập Máy Chủ Ban Đầu với CentOS 7.
- ● Bạn phải sở hữu hoặc kiểm soát tên miền đã đăng ký mà bạn muốn sử dụng chứng chỉ. Nếu chưa có tên miền, bạn có thể đăng ký với các nhà đăng ký tên miền như Namecheap, GoDaddy, v.v.
- ● Một bản ghi DNS (A Record) trỏ tên miền của bạn đến địa chỉ IP công cộng của máy chủ. Điều này là bắt buộc vì Let’s Encrypt xác thực quyền sở hữu tên miền khi cấp chứng chỉ. Ví dụ, nếu bạn muốn nhận chứng chỉ cho example.com, tên miền đó phải phân giải về máy chủ của bạn để quá trình xác thực hoạt động. Cấu hình của chúng ta sẽ sử dụng example.com và www.example.com, vì vậy cả hai bản ghi DNS đều cần thiết.
Sau khi đã chuẩn bị xong các yêu cầu trên, chúng ta hãy chuyển sang cài đặt phần mềm khách Let’s Encrypt.
Bước 1 – Cài đặt Phần mềm Certbot của Let’s Encrypt
Bước đầu tiên để sử dụng Let’s Encrypt nhận chứng chỉ SSL là cài đặt phần mềm certbot trên máy chủ của bạn. Hiện nay, cách tốt nhất để cài đặt là thông qua kho EPEL.
Kích hoạt quyền truy cập kho EPEL trên máy chủ của bạn bằng lệnh:
sudo yum install epel-release
Sau khi kho đã được kích hoạt, bạn có thể cài đặt gói certbot-nginx bằng lệnh:
sudo yum install certbot-nginx
Phần mềm khách Certbot của Let’s Encrypt bây giờ đã được cài đặt và sẵn sàng sử dụng.
Bước 2 – Cài đặt Nginx
Nếu bạn chưa cài đặt Nginx, bạn có thể làm điều này ngay bây giờ. Kho EPEL hiện đã được kích hoạt từ bước trước, vì vậy cài đặt Nginx bằng lệnh:
sudo yum install nginx
Sau đó, khởi động Nginx bằng systemctl:
sudo systemctl start nginx
Certbot có thể tự động cấu hình SSL cho Nginx, nhưng nó cần phải tìm thấy khối máy chủ (server block) đúng trong file cấu hình. Nó làm việc bằng cách tìm dòng server_name khớp với tên miền bạn đang yêu cầu chứng chỉ. Nếu bạn mới cài đặt Nginx, bạn có thể cập nhật file cấu hình mặc định bằng cách sử dụng vi hoặc trình soạn thảo ưa thích:
sudo vi /etc/nginx/nginx.conf
Tìm dòng server_name hiện có:
/etc/nginx/nginx.conf
server_name _;
Thay dấu gạch dưới (_) bằng tên miền của bạn:
/etc/nginx/nginx.conf
server_name example.com www.example.com;
Lưu file và thoát trình soạn thảo. Nếu bạn dùng vi, nhập :x
rồi nhấn y
khi được hỏi để lưu lại và thoát. Xác minh cú pháp của các thay đổi bằng lệnh:
sudo nginx -t
Nếu lệnh chạy mà không có lỗi, reload Nginx để nạp cấu hình mới:
sudo systemctl reload nginx
Certbot bây giờ sẽ có thể tìm thấy khối máy chủ đúng và cập nhật cấu hình. Bây giờ, chúng ta sẽ cập nhật tường lửa để cho phép lưu lượng HTTPS.
Bước 3 – Cập nhật Tường lửa
Nếu bạn đã kích hoạt tường lửa, hãy đảm bảo rằng các cổng 80 và 443 được mở cho lưu lượng đến. Nếu bạn không chạy tường lửa, bạn có thể bỏ qua bước này.
Nếu bạn sử dụng firewalld, mở các cổng này bằng cách:
sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=https sudo firewall-cmd --runtime-to-permanent
Nếu bạn đang sử dụng iptables, các lệnh cần chạy phụ thuộc rất nhiều vào tập hợp quy tắc hiện tại của bạn. Để có một tập hợp quy tắc ban đầu, bạn có thể thêm lưu lượng HTTP và HTTPS bằng lệnh:
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Bây giờ, chúng ta đã sẵn sàng chạy Certbot và tải chứng chỉ về.
Bước 4 – Nhận Chứng chỉ
Certbot cung cấp nhiều cách để nhận chứng chỉ SSL qua các plugin khác nhau. Plugin Nginx sẽ tự động cấu hình lại Nginx và reload cấu hình khi cần thiết:
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à chứng chỉ cần hợp lệ.
Nếu đây là lần đầu tiên bạn chạy Certbot, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với điều khoản sử dụng. Sau đó, Certbot sẽ giao tiếp với máy chủ của Let’s Encrypt, thực hiện một thử thách (challenge) để xác nhận rằng bạn kiểm soát tên miền yêu cầu chứng chỉ. Cấu hình sẽ được cập nhật và Nginx sẽ reload để nạp các thiết lập mới. Cuối cùng, Certbot sẽ thông báo rằng quá trình đã thành công và cho biết nơi lưu trữ chứng chỉ:
Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your certificate will expire on 2022-10-20. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - 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
Chứng chỉ của bạn đã được tải về, cài đặt và nạp thành công. Hãy thử reload website của bạn sử dụng https:// 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 màu xanh – cho thấy website được bảo mật đúng cách.
Bước 5 – Thiết lập Tự động Gia hạn
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 gia hạn chứng chỉ. Chúng ta cần thiết lập một lệnh chạy định kỳ để kiểm tra các chứng chỉ sắp hết hạn và tự động gia hạn.
Để chạy kiểm tra gia hạn hàng ngày, chúng ta sẽ sử dụng cron, một dịch vụ hệ thống tiêu chuẩn để thực hiện các công việc định kỳ. Bạn sẽ cấu hình cron bằng cách mở file crontab.
Chạy lệnh:
sudo crontab -e
Trình soạn thảo sẽ mở ra file crontab mặc định (hiện tại là một file trống). Dán dòng sau vào, sau đó lưu và đóng file:
crontab
. . . 15 3 * * * /usr/bin/certbot renew --quiet
Dòng 15 3 * * *
có nghĩa là “chạy lệnh sau vào lúc 3:15 sáng, mỗi ngày”. Bạn có thể chọn bất kỳ thời gian nào phù hợp.
Lệnh certbot renew
sẽ kiểm tra tất cả các chứng chỉ đã cài đặt trên hệ thống và cập nhật những chứng chỉ có hiệu lực dưới 30 ngày. Tham số --quiet
cho Certbot biết không in ra thông tin hoặc chờ tương tác từ người dùng.
Cron bây giờ sẽ chạy lệnh này hàng ngày. Tất cả các chứng chỉ được cài đặt sẽ được tự động gia hạn và reload khi có dưới 30 ngày hết hạn.
Để biết thêm thông tin về cách tạo và lập lịch cron, bạn có thể tham khảo bài Cách Sử Dụng Cron để Tự Động Hóa Các Công Việc Trên CentOS 8.
Kết Luận
Trong bài hướng dẫn này, chúng ta đã cài đặt phần mềm khách Certbot của Let’s Encrypt, tải xuống chứng chỉ SSL cho tên miền của chúng ta, cấu hình Nginx để sử dụng các chứng chỉ này và thiết lập tự động gia hạn chứng chỉ. Nếu bạn có thêm câu hỏi về việc sử dụng Certbot, tài liệu của họ là nơi khởi đầu tốt.