Let’s Encrypt là một tổ chức cấp chứng chỉ (CA) giúp cài đặt miễn phí chứng chỉ TLS/SSL để sử dụng giao thức HTTPS được mã hóa trên các web server. Trong bài viết này, Vietnix sẽ hướng dẫn cách bảo mật Apache với Let’s Encrypt trên CentOS 8, sử dụng Certbot để thiết lập chứng chỉ TLS/SSL với web server Apache và gia hạn chứng chỉ này bằng cách sử dụng cron job.
Điều kiện để bảo mật Apache với Let’s Encrypt trên CentOS 8
Để bắt đầu hướng dẫn ở bài viết này, bạn sẽ cần một số điều kiện như sau:
- Một server trên CentOS 8 với non-root user có đặc quyền sudo và đã được cấu hình firewall cơ bản với
firewalld
. - Apache đã được cài đặt trên server và đã được cấu hình virtual host cho domain. Hướng dẫn này sẽ dùng file
/etc/httpd/sites-available/vietnixtest.com.conf
làm ví dụ. - Có quyền kiểm soát domain mà bạn muốn đăng ký chứng chỉ.
- Một bản ghi DNS
A
trỏ đến địa chỉ IP public của server.
Các bước thực hiện bảo mật Apache với Let’s Encrypt trên CentOS 8
Bước 1 – Cài đặt Certbot Let’s Encrypt Client
Để sử dụng Let’s Encrypt cho việc đăng ký chứng chỉ SSL, trước tiên bạn cần cài đặt Certbot và mod_ssl
, một module của Apache cung cấp hỗ trợ mã hóa SSLv3.
Package certbot
thường không có sẵn trong trình quản lý package. Bạn sẽ cần kích hoạt EPEL repository để cài đặt Certbot. Để làm điều này, hãy nhập lệnh sau:
sudo dnf install epel-release
Bây giờ bạn đã có thể truy cập vào repository, hãy cài đặt tất cả các package cần thiết:
sudo dnf install certbot python3-certbot-apache mod_ssl
Sau khi cài đặt các dịch vụ này, bạn có thể chạy Certbot để đăng ký chứng chỉ của mình.
Bước 2 – Đăng ký chứng chỉ
Sử dụng certbot
để tạo chứng chỉ SSL cho Apache giúp tự động hóa nhiều bước trong quá trình. Client sẽ tự động nhận và cài đặt một chứng chỉ SSL mới hợp lệ cho các domain bạn cung cấp.
Để thực hiện quá trình cài đặt và nhận chứng chỉ cho một domain duy nhất, chạy lệnh certbot
như sau:
sudo certbot --apache -d vietnixtest.com
Lệnh này chạy certbot
với plugin --apache
và chỉ định domain để cung cấp chứng chỉ bằng flag -d
.
Nếu bạn muốn cài đặt một chứng chỉ hợp lệ cho nhiều domain hoặc subdomain, hãy thêm chúng vào như một tham số bằng cách đánh sử dụng flag -d
cho mỗi domain hoặc subdomain. Domain đầu tiên trong danh sách sẽ là domain chính được Let’s Encrypt dùng để cấp chứng chỉ. Vì lý do này, hãy chuyển domain chính lên trên đầu danh sách, theo sau là các domain bổ sung hoặc subdomain.
sudo certbot --apache -d vietnixtest.com -d www.vietnixtest.com
Ở ví dụ này, doamin chính sẽ là vietnixtest.com.
certbot
cũng có thể yêu cầu bạn chọn domain dựa trên cấu hình Apache hiện tại. Để sử dụng tính năng này, hãy dùng lệnh certbot
mà không chỉ định bất kỳ domain nào:
sudo certbot --apache
Chương trình sẽ hiển thị hướng dẫn từng bước để tùy chỉnh chứng chỉ của bạn. Chương trình này yêu cầu cũng cấp một địa chỉ email cho việc thông báo và khôi phục các key bị mất, sau đó yêu cầu người dùng đồng ý với các điều khoản dịch vụ. Nếu các file Virtual Host không chỉ định rõ domain bằng chỉ thị ServerName
, bạn sẽ được yêu cầu chọn file Virtual Host:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/vietnixtest.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/vietnixtest.com/privkey.pem
Your cert will expire on 2020-09-24. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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 file chứng chỉ đã được tạo sẽ có sẵn trong subdirectory và được đặt tên giống domain chính trong thư mục /etc/letsencrypt/live
.
Sau khi chứng chỉ đã được tải xuống, hãy cài đặt và tải chúng lên để kiểm tra trạng thái cũng như đảm bảo mọi thứ hoạt động ổn định.
Bên cạnh việc tự tạo chứng chỉ SSL, bạn có thể đăng ký sử dụng dịch vụ SSL tại Vietnix với mức giá chỉ từ 160.000 VNĐ/Năm. Ngoài ra nếu có nhu cầu sử dụng cho doanh nghiệp, tổ chức, bạn có thể lựa chọn các gói cao cấp hơn. Sau khi thanh toán hoàn tất, chứng chỉ sẽ được cấp phát nhanh chóng trong vòng 5 phút. Liên hệ với Vietnix để được tư vấn chi tiết các gói SSL theo nhu cầu sử dụng và ngân sách của bạn.
Bước 3 – Kiểm tra và cấu hình chứng chỉ SSL
Hiện tại, bạn có thể đảm bảo Certbot đã tạo chứng chỉ SSL bằng cách sử dụng SSL Server Test từ công ty Qualys.
Mở liên kết sau trong trình duyệt web, thay thể vietnixtest.com
bằng domain của bạn:
https://www.ssllabs.com/ssltest/analyze.html?d=vietnixtest.com
Bạn sẽ được chuyển đến website để kiểm tra kết nối SSL đến server:
Quá trình kiểm tra sẽ mất một vài phút để hoàn thành. Trạng thái của quá trình sẽ được cập nhật trên trình duyệt của bạn.
Khi quá trình này kết thúc, website sẽ hiển thị điểm đánh giá mức độ bảo mật và chất lượng cấu hình của server. Tại thời điểm này, các cài đặt mặc định sẽ đạt điểm A:
Hãy tải lại website bằng https://
và chú ý đển biểu tượng hiển thị trên trình duyệt để xác mình website đã được bảo mật đúng cách, thường được hiển thị bằng biểu tượng chìa khóa.
Với chứng chỉ SSL đã được cài đặt và xác minh, bước tiếp theo là thiết lập tự động gia hạn để chứng chỉ luôn hợp lệ.
Bước 4 – Thiết lập tự động gia hạn chứng chỉ SSL
Chứng chỉ của Let’s Encrypt thường có hiệu lực trong 90 ngày. Tuy nhiên người dùng nên gia hạn hai lần mỗi ngày để đảm bảo không có bất kỳ vấn đề ngoài ý muốn xảy ra. Lúc này, việc tự động gia hạn là một phương pháp tối ưu.
Trước tiên, hãy kiểm tra lệnh mà bạn cần sử dụng cho việc gia hạn chứng chỉ. certbot
Let’s Encrypt client có một lệnh là renew
, giúp tự động kiểm tra các chứng chỉ đã cài đặt và gia hạn nếu còn ít hơn 30 ngày. Bạn có thể dùng --dry-run
để mô phỏng cách hoạt động của lệnh renew
:
sudo certbot renew --dry-run
Output hiển thị sẽ như sau:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/vietnixtest.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for vietnixtest.com
http-01 challenge for www.vietnixtest.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/vietnixtest.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/vietnixtest.com/fullchain.pem (success)
Lưu ý, nếu bạn tạo một chứng chỉ cho nhiều domain, chỉ có domain chính mới hiển thị trong output. Nhưng việc tự động gia hạn là có hiệu lực với tất cả các domain đã bao gồm trong chứng chỉ này.
Một cách để đảm bảo chứng chỉ không bị lỗi thời là tạo một cron
job, giúp thực thi định kỳ lệnh gia hạn tự động.
Bạn nên chạy cron hai lần mỗi ngày để đảm bảo chứng chỉ luôn được cập nhật và không bị thu hồi. Bạn có thể sử dụng lệnh sau để tạo cron
job phù hợp vào file /etc/crontab
:
echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
Lệnh này sẽ tạo ra một cron job chạy vào lúc 12 giờ trưa và 12 giờ đêm mỗi ngày (0 0,12 * * *
). Sau đó chạy một đoạn mã python3
ngắn và dừng lệnh trong một khoảng thời gian từ 0 đến 60 phút nhằm mục đích tránh tình trạng quá tải của server.
Sau khi đoạn mã python kết thúc, lệnh gia hạn chứng chỉ certbot renew
sẽ tiếp tục chạy.
Với hơn 11 năm kinh nghiệm trong lĩnh vực cung cấp giải pháp hosting, VPS, tên miền, Vietnix đã phục vụ cho hơn 50.000 khách hàng cá nhân và doanh nghiệp. Với hơn 100.000 dịch vụ được kích hoạt, Vietnix tự hào khi 97% khách hàng giới thiệu dịch vụ sau khi trải nghiệm. Đặc biệt, Vietnix đã được trao giải thưởng Thương hiệu Việt Nam xuất sắc năm 2022, càng khẳng định chất lượng dịc vụ và uy tín của Vietnix trong ngành hosting, VPS. Vietnix cam kết sẽ tiếp tục đem đến cho khách hàng những giải pháp lưu trữ số tốt nhất và đáp ứng tối đa nhu cầu. Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Hotline: 1800 1093.
- Email: sales@vietnix.com.vn.
Lời kết
Ở hướng dẫn này, bạn đã cài đặt Certbot Let’s Encrypt Client, tải xuống chứng chỉ SSL cho domain và thiết lập tự động gia hạn chứng chỉ. Mong rằng bạn có thể thiết lập thành công theo hướng dẫn này để giảm thiểu rủi ro rò rỉ thông tin trong quá trình hoạt động trên internet. Nếu có bất kỳ câu hỏi nào, hãy để lại bình luận bên dưới để Vietnix hỗ trợ bạn giải đáp thắc mắc nhé.