Nhờ có Let’s Encrypt, cơ quan cấp chứng chỉ số (Certificate Authority – CA), bạn sẽ dễ dàng cài đặt chứng chỉ TLS/SSL miễn phí, từ đó có thể mã hóa HTTPS trên web server. Đồng thời, nó cung cấp công cụ Certbot để tự động xử lý các công việc đó làm cho quá trình xử lý trở nên nhanh hơn. Bài viết dưới đây sẽ hướng dẫn bạn cách lấy và cài đặt chứng chỉ để bảo mật Nginx bằng Let’s Encrypt trên CentOS 7.
Cần chuẩn bị gì để có thể bảo mật Nginx bằng Let’s Encrypt trên CentOS 7
Trước khi làm theo các bước trong bài viết này, bạn cần chuẩn bị:
- Một máy chủ CentOS 7 với người dùng không phải root và có quyền
sudo
. - Một tên miền website. Trường hợp bạn chưa có tên miền, có thể liên hệ với Vietnix để đăng ký một tên miền phù hợp cho website nhé.
- Cấu hình DNS tên miền đến IP của máy chủ của . Let’s Encrypt sẽ xác minh bạn sở hữu tên miền được cấp chứng chỉ. Ví dụ, nếu bạn muốn lấy chứng chỉ cho
example.com
thì tên miền đó phải được trỏ đến máy chủ để quá trình xác minh hoạt động. Trong bài viết, Vietnix sẽ sử dụng example.com và www.example.com làm tên miền. Vì vậy bắt buộc có cả hai bản ghi DNS.
Sau khi đã chuẩn bị đầy đủ, hãy tiến hành cài đặt Let’s Encrypt theo hướng dẫn dưới đây.
Ngoài ra, bạn có thể liên hệ với Vietnix để được tư vấn thuê máy ảo (VPS) tốc độ cao có cầu hình phù hợp với nhu cầu và đa dạng hệ điều hành CentOS, Ubuntu, Debian, Windows Server,… Đặc biệt, khi sở hữu VPS Vietnix, bạn tự do quản trị và cài đặt các phần mềm, ứng dụng trên máy chủ của mình.
Bước 1 — Cài đặt Certbot Let’s Encrypt Client
Bước đầu tiên khi sử dụng Let’s Encrypt để lấy chứng chỉ SSL là cài đặt certbot
trên máy chủ của bạn. Cách tốt nhất là cài đặt thông qua kho lưu trữ EPEL.
Bật cho phép truy cập vào kho lưu trữ EPEL trên máy chủ của bạn bằng cách nhập:
sudo yum install epel-release
Sau khi kho lưu trữ đã được kích hoạt, bạn có thể lấy gói certbot-nginx
bằng cách nhập:
sudo yum install certbot-nginx
Phần mềm certbot
Let’s Encrypt client hiện đã được cài đặt và sẵn sàng để sử dụng.
Bước 2 — Cài đặt và cấu hình Nginx
Nếu chưa cài đặt Nginx bạn có thể cài đặt ngay bây giờ. Kho lưu trữ EPEL đã được kích hoạt từ phần trước đó, vì vậy bạn có thể cài đặt Nginx bằng cách nhập:
sudo yum install nginx
Sau đó, bắt đầu sử dụng Nginx bằng systemctl
:
sudo systemctl start nginx
Certbot có thể tự động cấu hình SSL cho Nginx nhưng cần phải tìm server
block chính xác trong cấu hình của bạn. Điều này được thực hiện bằng cách tìm kiếm server_name
phù hợp với tên miền bạn muốn cấp chứng chỉ. Nếu bạn sử dụng bản cài đặt mới của Nginx, bạn có thể cập nhật file cấu hình mặc định bằng vi
hoặc bất kỳ trình chỉnh sửa văn bản nào :
sudo vi /etc/nginx/nginx.conf
Tìm dòng server_name hiện có:
server_name _;
Thay thế dấu gạch dưới _
ở cuối bằng tên miền của bạn:
server_name example.com www.example.com;
Lưu file và thoát khỏi trình chỉnh sửa. Nếu bạn đang sử dụng vi
, nhập :x
, sau đó nhập y
khi được hỏi để lưu và thoát. Xác minh các chỉnh sửa của cấu hình bằng cách nhập:
sudo nginx -t
Nếu chạy không xuất hiện lỗi, bạn hãy tải lại Nginx để tải cấu hình mới:
sudo systemctl reload nginx
Certbot hiện có thể tìm thấy và cập nhật server
block chính xác. Tiếp theo, bạn 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 đã bật tường lửa, hãy đảm bảo cổng 80 và 443 mở cho phép lưu lượng vào từ hai cổng này. Nếu bạn không chạy tường lửa thì có thể bỏ qua bước này.
Nếu bạn đang chạy tường lửa firewalld, bạn có thể mở các cổng trên bằng cách nhập lệnh:
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent
Nếu bạn đang chạy tường lửa iptables, các lệnh cần chạy phụ thuộc nhiều vào bộ quy tắc. Để đặt các quy tắc ban đầu, bạn có thể thêm quyền truy cập HTTP và HTTPS thông qua 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ờ bạn đã sẵn sàng chạy Certbot và lấy chứng chỉ.
Bước 4 — Lấy chứng chỉ
Certbot cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin khác nhau. 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:
sudo certbot --nginx -d example.com -d www.example.com
Đây là lệnh chạy certbot
với plugin --ngin
dùng -d
chỉ định các tên mà bạn muốn áp dụng chứng chỉ.
Nếu đây là lần đầu tiên chạy certbot
, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau đó, certbot
sẽ liên lạc với máy chủ Let’s Encrypt để chạy xác minh bạn kiểm soát miền mà bạn yêu cầu chứng chỉ.
Cấu hình sẽ được cập nhật và Nginx sẽ tải lại để lấy cấu hình mới. certbot
sẽ kết thúc với một thông báo quá trình đã thành công và nơi lưu trữ chứng chỉ của bạn:
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 xuống, cài đặt và hoạt động. Hãy thử tải lại trang web bằng https://
và chú ý đến chỉ báo bảo mật của trình duyệt của bạn. Trang web được bảo mật đúng cách thường hiển thị với một biểu tượng khóa màu xanh lá cây.
Bước 5 – Cài đặt tự động gia hạn
Chứng chỉ của Let’s Encrypt chỉ có giá trị trong chín 90 nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ của mình. Bạn cần thiết lập một lệnh chạy định kỳ để kiểm tra chứng chỉ hết hạn và tự gia hạn chúng.
Sử dụng cron
để chạy kiểm tra gia hạn hàng ngày. Cron
là một dịch vụ hệ thống chạy các tác vụ định kỳ. Đầu tiên, bạn mở cron
và chỉnh sửa file crontab
.
sudo crontab -e
Trình chỉnh sửa văn bản sẽ mở crontab mặc định. Đó là một file văn bản trống. Dán vào dòng sau đây, sau đó lưu và đóng file:
. . .
15 3 * * * /usr/bin/certbot renew --quiet
Phần 15 3 * * *
của có nghĩa là “chạy lệnh sau đây lúc 3:15 sáng hàng ngày”. Bạn có thể chọn bất kỳ thời gian nào bạn muốn.
Lệnh renew
cho Certbot kiểm tra tất cả các chứng chỉ được cài đặt trên hệ thống và cập nhật chứng chỉ nào hết hạn trong ít hơn 30 ngày. --quiet
cho Certbot biết không xuất thông tin hoặc không đợi người dùng nhập vào.
cron
sẽ chạy lệnh này hàng ngày. Tất cả các chứng chỉ đã cài đặt sẽ được tự động gia hạn và tải lại khi còn 30 ngày hoặc ít hơn thì hết hạn.
Ngoải ra thì trên CentOS 7, thiết lập khóa SSH là một phương pháp bảo mật tốt cho việc truy cập máy chủ từ xa. Việc sử dụng khóa SSH không chỉ đảm bảo tính bảo mật cao hơn so với đăng nhập bằng mật khẩu, mà còn giúp tiết kiệm thời gian và tăng hiệu quả làm việc.
Lời kết
Trong hướng dẫn này, bạn đã cài đặt Let’s Encrypt client certbot
, tải xuống chứng chỉ SSL cho tên miền của mình, cấu hình Nginx để sử dụng các chứng chỉ và thiết lập tự động gia hạn chứng chỉ. Nếu bạn có thắc mắc về việc sử dụng Certbot, hãy để lại bình luận ở bên dưới bài viết này để được giải đáp.