Let’s Encrypt cung cấp certificate TLS miễn phí để mã hóa HTTPS trên web server. Sử dụng một software client giúp tự động hóa quá trình tạo mới, cài đặt và renewal certificate trên CentOS7 server chạy Apache. Vì vậy để có thể biết cách bảo mật Apache bằng Let’s Encrypt trên CentOS 7, bạn hãy tìm hiểu bài viết dưới đây của Vietnix nhé.
Giới thiệu về Let’s Encrypt
Let’s Encrypt là một Tổ chức phát hành chứng chỉ số (Certificate Authority – CA), cung cấp các certificate miễn phí cho mã hóa Transport Layer Security (TLS) , qua đó cho phép mã hóa HTTPS ở các web server. Let’s Encrypt đơn giản hóa quá trình tạo mới, xác thực, đăng ký, cài đặt và renewal (đổi mới) các certificate bằng cách cung cấp một software client – Certbot – cho phép tự động hóa hầu hết các bước.
Ở bài hướng dẫn này, bạn sẽ sử dụng Certbot để cài đặt TLS/SSL certificate từ Let’s Encrypt trên CentOS 7 server chạy Apache để làm web server. Bên cạnh đó, bạn sẽ dùng cron job để tự động hóa quá trình renewal certificate.
Yêu cầu để bảo mật Apache bằng Let’s Encrypt trên CentOS 7
- Một tài khoản non-root với quyền
sudo
trên CentOS 7 server. - Kích hoạt tường lửa.
- Cài đặt Apache với virtual host (máy ảo) trên CentOS 7 server . Trong bài hướng dẫn này, sẽ sử dụng
/etc/httpd/sites-available/vietnixtest.com.conf
làm ví dụ. - Sở hữu một tên miền để có thể dùng certificate. Nếu chưa có tên miền, bạn có thể liên hệ Vietnix để được tư vấn lựa chọn và đăng ký tên miền phù hợp với nhu cầu sử dụng.
- Một DNS A Record để trỏ domain đến địa chỉ public IP của server. Việc này là bắt buộc vì đây là cách để Let’s Encrypt xác định được rằng bạn sở hữu domain để Let’s Encrypt có thể cấp certificate.
Ví dụ, nếu bạn muốn lấy certificate cho
, điều đó yêu cầu domain buộc phải phân giải thành server của người dùng, qua đó quy trình mới tiến hành. Ở đây, sẽ dùng vietnixtest.com
vietnixtest.com
và www.vietnixtest.com
làm domain name cho bài viết.
Sau khi hoàn tất các yêu cầu trên, bạn đã có thể bắt đầu cài đặt Let’s Encrypt client software.
Bước 1: Cài đặt Certbot Let’s Encrypt Client
Để có thể lấy certificate từ Let’s Encrypt, bạn cần cài đặt Certbot và mod_ssl
, một Apache module hỗ trợ mã hóa SSL v3.
Gói certbot
không có sẵn vì vậy mặc định bạn cần thông qua package manager (trình quản lý gói). Để cài đặt Certbot, bạn cần kích hoạt EPEL repository.
Thực thi lệnh sau đây để thêm CentOS 7 EPEL repository:
sudo yum install epel-release
Bây giờ bạn đã có thể truy cập vào repository, tiến hành cài đặt các gói cần thiết như sau:
sudo yum install certbot python2-certbot-apache mod_ssl
Trong quá trình cài đặt, bạn sẽ nhận được 1 câu hỏi về việc import GPG key. Key này sẽ xác thực gói mà bạn đang cài đặt. Lúc này, bạn hãy nhập y
để cho phép import GPG key, sau đó nhấn ENTER
.
Sau khi hoàn tất, bạn đã có thể sử dụng Certbot và fetch certificate của mình.
Như đã được trình bày trong phần yêu cầu, để thực hiện theo hướng dẫn này, bạn cần có một máy chủ cài đặt hệ điều hành CentOS 7 với cấu hình phù hợp. Trong trường hợp bạn chưa sở hữu một máy chủ, bạn có thể xem xét việc thuê VPS Việt Nam với các gói dịch vụ tốc độ cao từ Vietnix.
Vietnix hiện đang cung cấp nhiều gói VPS khác nhau từ VPS Giá Rẻ, VPS SSD, VPS AMD, VPS GPU và VPS NVMe. với cấu hình đa dạng và chi phí phải chăng. VPS tại Vietnix được đầu tư phần cứng mạnh mẽ, công nghệ hiện đại nên tốc độ rất nhanh, luôn hoạt động ổn định. Ngoài ra, còn backup tự động hàng tuần, giao diện quản trị đơn giản và có hỗ trợ nhiều hệ điều hành (trong đó có CentOS 7).
Bước 2: Thực hiện lấy certificate
Bây giờ bạn hãy dùng Certbot, sau khi đã được cài đặt, để yêu cầu SSL certificate cho domain của mình.
Sử dụng certbot
từ Let’s Encrypt client để tạo SSL Certificate cho Apache có thể tự động hóa thực thi các bước có trong quy trình. Client sẽ nhận và cài đặt SSL certificate mới một cách tự động, có hiệu lực cho domain như là một tham số khi truyền vào
Để thực thi quá trình cài đặt và nhận certificate mà chỉ áp dụng cho một domain duy nhất, bạn hãy sử dụng lệnh certbot
như sau:
sudo certbot --apache -d vietnixtest.com
Câu lệnh trên dùng certbot
với –apache
và chỉ định domain cần cấu hình certificate với -d
.
Nếu bạn muốn áp dụng một certificate cho nhiều domain hoặc subdomain, bạn có thể truyền dưới dạng các tham số trong dòng lệnh, sau đó dùng -d
để đánh dấu mỗi domain hoặc subdomain. Domain đầu tiên sẽ được Let’s Encrypt dùng làm base domain để tạo certificate. Vì vậy, bạn hãy chuyển domain đầu tiên trong danh sách tham số, sau đó sẽ là các domain còn lại hoặc subdomain:
sudo certbot --apache -d vietnixtest.com -d www.vietnixtest.com
Base domain trong ví dụ này là
.vietnixtest.com
certbot
có thể yêu cầu thông tin về domain của bạn trong quá trình nhận certificate. Để dùng tính năng này, bạn sẽ dùng certbot
như sau:
sudo certbot --apache
Chương trình sẽ hướng dẫn bạn thiết lập các tùy chọn của certificate từng bước một. Sau đó sẽ yêu cầu bạn cung cấp email để thông báo và có thể khôi phục lại khóa khi mất, tiếp tục là sẽ yêu cầu bạn đồng ý với các điều khoản dịch vụ. Đồng thời, khi bạn không chỉ định domain, bạn cũng sẽ được yêu cầu nhập domain vào.
Nếu các file virtual host không chỉ định domain bằng cách dùng ServerName
, bạn sẽ được yêu cầu chọn file virtual host. Mặc định, file ssl.conf
sẽ hoạt động trong hầu hết các trường hợp.
Bạn có thể chọn giữa việc cho phép truy cập http
và https
hoặc buộc các yêu cầu đều phải gửi đến https
. Nếu bạn không có nhu cầu đặc biệt nào về việc cho phép các kết nối không cần mã hóa thì lựa chọn 2: Redirect
, sẽ giúp bảo mật tốt hơn. Sau khi chọn xọng, hãy nhấn ENTER.
Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):2
Bạn sẽ nhận được output sau đây khi cài đặt thành công:
Output
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 2019-08-14. 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
Các file certificate sau khi được tạo, sẽ có sẵn trong subdirectory được đặt tên theo tên basedomain trong thư mục /etc/letsencrypt/live
.
Như vậy là đã download và cài đặt certificates. Bạn có thể kiểm tra SSL certificate status để đảm bảo mọi thứ đều đang hoạt động.
Bước 3: Kiểm tra Certificate Status
Bằng cách sử dụng SSL Server Test từ Qualys – cloud security company (công ty bảo mật could), bạn có thể đảm bảo Certbot đã tạo được SSL certificate.
Truy cập đường link bằng trình duyệt web, đồng thời thay thế
thành base domain của bạn:vietnixtest.com
https://www.ssllabs.com/ssltest/analyze.html?d=vietnixtest.com
Ngay lập tức bạn sẽ được chuyển đến trang web, nơi kiểm tra kết nối SSL đến server của mình
Quá trình kiểm tra này có thể mất một vài phút để hoàn thành. Trạng thái kiểm tra sẽ được cập nhật trên trình duyệt.
Khi quá trình kiểm tra hoàn tất, trang web sẽ hiển thị đánh giá về mức độ bảo mật và chất lượng cấu hình server, dưới dạng chữ cái . Ví dụ ở hình sau đây, tại thời điểm viết bài, mặc định tùy chỉnh sẽ hiển thị là A:
Sau đó, bạn hãy thử tải lại trang web bằng https://
. Lúc này bạn hãy chú ý xem có biểu tượng khóa màu xanh lá cây hay không, vì biểu tượng này sẽ cho biết trang web hiện đang được bảo mật.
Khi SSL certificate đã được cài đặt và xác thực. Sang bước tiếp theo, bạn sẽ thiết lập renewal tự động cho certificate để đảm bảo các certificate này có luôn hiệu lực.
Bước 4: Thiết lập chức năng tự động Renewal certificate
Let’s Encrypt certificates chỉ có hiệu lực trong vòng 90 ngày, vì vậy bạn nên renew certificate mỗi 60 ngày để đảm bảo có một khoảng thời gian dự phòng. Ngoài ra cũng nên tự động hóa việc kiểm tra hiệu lực định kỳ và renew certificate này.
Đầu tiên, hãy tìm hiểu về lệnh sẽ sử dụng để renew certificate. certbot
từ Let’s Encrypt client cung cấp lệnh renew
cho phép tự động kiểm tra các certificate đã được cài đặt và sẽ tự động renew nếu hiệu lực của certificate còn dưới 30 ngày. Sử dụng --dry-run
, để xem cách thức hoạt động của lệnh renew
như sau:
sudo certbot renew --dry-run
Output sẽ được xuất hiện như sau:
Output
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 ý rằng nếu bạn tạo certificate gồm nhiều domain thì chỉ base domain sẽ được hiển trong output, tuy nhiên việc renewal sẽ có hiệu lực cho tất cả domain
Ở đây, vẫn còn một cách khác để đảm bảo certificate của bạn không mất hiệu đó là tạo một cron job để tự động thực thi các lệnh cho việc renewal. Do lần renewal đầu tiên sẽ kiểm tra ngày hết hạn và renewal nếu certificate còn hiệu lực dưới 30 ngày, vì vậy sẽ rất an toàn để tạo cron job và thực thi hàng tuần hoặc thậm chí là mỗi ngày.
Official Certbot documentation (Tài liệu Certbot chính thống ) khuyến khích chạy cron
2 lần mỗi ngày. Việc này sẽ đảm bảo trong trường hợp Let’s Encrypt tiến hành thu hồi certificate, Certbot sẽ renew certificate trong vòng không quá nửa ngày.
Sau đó, bạn bạn hãy dùng lệnh dưới đây giúp sửa crontab
để tạo job mới và thực thi việc renewal 2 lần mỗi ngày:
sudo crontab -e
Lúc này, trình chỉnh sửa của bạn sẽ ở file crontab
mặc định, đó sẽ là một file trống. Trong bài hướng dẫn này sẽ dùng trình chỉnh sửa vi.
Nhấn i để có thể vào chế độ insert và thêm đoạn lệnh sau vào file:
crontab
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
Sau khi hoàn tất, hãy nhấn nút ESC
để thoát khỏi chế độ chèn, sau đó gõ :wq
và nhấn ENTER
để lưu và thoát file. Việc này sẽ tạo một cron job mới thực thi vào lúc 0h và 12h trưa mỗi ngày. Thêm một biến ngẫu nhiên vào cron job để tránh việc thực hiện đồng thời, tránh xử lý quá tải và làm chậm hoạt động của server; python -c 'import random; import time; time.sleep(random.random() * 3600)'
đoạn lệnh này sẽ chọn thời gian ngẫu nhiên để thực thi renewal.
Lời kết
Như vậy, bạn đã biết cách cài đặt được Let’s Encrypt Certbot client, tải SSL certificates cho domain của mình và thiết lập chức năng tự động gia hạn certificate. Cảm ơn các bạn đọc bài hướng dẫn này, hãy cùng chia sẻ bài viết đến mọi người nếu thấy hữu ích cũng như đóng góp ý kiến của bạn ở phần bình luận bên dưới nhé.