Let’s Encrypt là một Tổ chức cấp phát Chứng chỉ (Certificate Authority – CA) cung cấp chứng chỉ TLS/SSL miễn phí, giúp chúng ta dễ dàng kích hoạt kết nối HTTPS được mã hóa trên máy chủ web. Quy trình được đơn giản hóa thông qua Certbot: một công cụ phần mềm hỗ trợ tự động hóa gần như toàn bộ các bước cần thiết. Hiện nay, việc lấy và cài đặt chứng chỉ đã có thể được tự động thực hiện hoàn toàn đối với cả Apache và Nginx.
Trong hướng dẫn này, chúng ta sẽ bảo mật Apache với Let’s Encrypt trên Ubuntu, đồng thời thiết lập cơ chế tự động gia hạn chứng chỉ.
Chúng ta sẽ cấu hình chứng chỉ bảo mật cho website bằng cách sử dụng một tệp virtual host riêng, thay vì chỉnh sửa trực tiếp tệp cấu hình mặc định của Apache. Việc tạo một virtual host riêng cho từng tên miền được lưu trữ trên máy chủ là phương pháp được khuyến nghị, nhằm hạn chế lỗi cấu hình phổ biến và giữ nguyên tệp cấu hình mặc định như một phương án dự phòng.
Cách Bảo Mật Apache bằng Let’s Encrypt trên Ubuntu
- Cài đặt Certbot
- Kiểm tra Cấu Hình Virtual Host của Apache
- Mở Kết Nối HTTPS qua Tường Lửa
- Lấy Chứng Chỉ SSL
- Xác Minh Tính Năng Tự Động Gia Hạn của Certbot
Yêu cầu trước khi bắt đầu
Để làm theo hướng dẫn này, bạn cần:
- Một máy chủ Ubuntu đã được thiết lập với người dùng không phải root, có quyền sudo và đã kích hoạt tường lửa. Bạn có thể thiết lập môi trường này bằng cách làm theo hướng dẫn khởi tạo máy chủ Ubuntu.
- Một tên miền đã đăng ký đầy đủ. Trong toàn bộ hướng dẫn này, chúng tôi sẽ sử dụng
your_domain
làm ví dụ. Bạn có thể mua tên miền từ Namecheap, đăng ký miễn phí tại Freenom hoặc sử dụng bất kỳ nhà cung cấp tên miền nào bạn muốn. - Hai bản ghi DNS sau được thiết lập trỏ về máy chủ của bạn. Bạn có thể tham khảo phần giới thiệu về DNS trên DigitalOcean để tìm hiểu thêm:
- Một bản ghi A trỏ từ
your_domain
đến địa chỉ IP công cộng của máy chủ - Một bản ghi A trỏ từ
www.your_domain
đến địa chỉ IP công cộng của máy chủ
- Một bản ghi A trỏ từ
- Apache đã được cài đặt theo hướng dẫn Cách Cài Đặt Apache trên Ubuntu. Chúng ta cần kiểm tra và đảm bảo rằng đã có tệp virtual host dành riêng cho tên miền của mình. Trong hướng dẫn này, chúng ta sẽ sử dụng tệp
/etc/apache2/sites-available/your\\_domain.conf
làm ví dụ.
Bước 1: Cài đặt Certbot
Để lấy chứng chỉ SSL từ Let’s Encrypt, chúng ta cần cài đặt phần mềm Certbot trên máy chủ thông qua các kho phần mềm mặc định của Ubuntu.
Trước tiên, bạn hãy cập nhật chỉ mục gói cục bộ:
sudo apt update
Bạn cần cài đặt hai gói: certbot
và python3-certbot-apache
. Gói thứ hai là một plugin tích hợp Certbot với Apache, cho phép tự động lấy chứng chỉ và cấu hình HTTPS cho máy chủ web chỉ với một lệnh duy nhất:
sudo apt install certbot python3-certbot-apache
Hệ thống sẽ yêu cầu bạn xác nhận cài đặt bằng cách nhấn Y
, sau đó nhấn ENTER
.
Certbot hiện đã được cài đặt trên máy chủ. Ở bước tiếp theo, bạn cần kiểm tra cấu hình của Apache để đảm bảo virtual host được thiết lập chính xác. Điều này giúp script Certbot có thể phát hiện các tên miền và tự động cấu hình lại máy chủ web để sử dụng chứng chỉ SSL mới tạo.
Bước 2: Kiểm tra cấu hình Virtual Host của Apache
Để tự động lấy và cấu hình chứng chỉ SSL cho máy chủ web, Certbot cần tìm đúng virtual host trong các tệp cấu hình Apache. Tên miền của máy chủ sẽ được lấy từ các chỉ thị ServerName
và ServerAlias
được khai báo trong khối VirtualHost
.
Nếu bạn đã thực hiện bước thiết lập virtual host trong hướng dẫn cài đặt Apache, cần có một khối VirtualHost
được cấu hình cho tên miền tại đường dẫn /etc/apache2/sites-available/your_domain.conf
, trong đó đã khai báo ServerName
và ServerAlias
một cách hợp lý.
Để xác nhận điều này, bạn hãy mở tệp virtual host tương ứng bằng nano hoặc trình soạn thảo văn bản mà bạn ưa thích:
sudo nano /etc/apache2/sites-available/your_domain.conf
Tìm các dòng ServerName
và ServerAlias
hiện có. Các dòng này nên được khai báo như sau:
/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...
Nếu bạn đã cấu hình ServerName
và ServerAlias
như trên, bạn có thể thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo. Nếu cấu hình hiện tại của bạn không giống với ví dụ, bạn hãy cập nhật lại cho phù hợp. Nếu đang sử dụng nano, bạn có thể thoát bằng cách nhấn CTRL+X
, sau đó nhấn Y
và ENTER
để lưu thay đổi (nếu có). Tiếp theo, chạy lệnh sau để xác minh cấu hình:
sudo apache2ctl configtest
Bạn nên nhận được thông báo Syntax OK
. Nếu gặp lỗi, hãy mở lại tệp virtual host và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu không. Khi cú pháp trong tệp cấu hình đã chính xác, hãy tải lại Apache để các thay đổi có hiệu lực:
sudo systemctl reload apache2
Với các thay đổi trên, Certbot sẽ có thể tìm đúng khối VirtualHost
để cập nhật.
Tiếp theo, cần cập nhật cấu hình tường lửa để cho phép lưu lượng HTTPS.
Bước 4: Lấy chứng chỉ SSL
Certbot cung cấp nhiều phương thức khác nhau để lấy chứng chỉ SSL thông qua các plugin. Plugin Apache sẽ đảm nhiệm việc cấu hình lại Apache và tải lại cấu hình khi cần thiết. Để sử dụng plugin này, bạn hãy chạy lệnh sau:
sudo certbot --apache
Script này sẽ yêu cầu bạn trả lời một loạt câu hỏi để cấu hình chứng chỉ SSL. Trước tiên, cần được yêu cầu nhập một địa chỉ email hợp lệ. Địa chỉ này sẽ được sử dụng để gửi thông báo gia hạn và cảnh báo bảo mật:
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): you@your_domain
Sau khi nhập địa chỉ email hợp lệ, nhấn ENTER
để đi đến bước tiếp theo. Tiếp theo, cần yêu cầu xác nhận bạn đã đồng ý với các điều khoản dịch vụ của Let’s Encrypt. Xác nhận bằng cách nhấn Y
, sau đó ENTER
:
Please read the Terms of Service at
<https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf>. You must
agree in order to register with the ACME server at
<https://acme-v02.api.letsencrypt.org/directory>
(Y)es/(N)o: Y
Tiếp theo, bạn có muốn chia sẻ địa chỉ email của mình với tổ chức Electronic Frontier Foundation (EFF) để nhận tin tức và các thông tin khác không? Nếu không muốn đăng ký nhận nội dung từ EFF, bạn hãy nhập N
. Nếu đồng ý, nhập Y
, sau đó nhấn ENTER
để tiếp tục:
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
(Y)es/(N)o: N
Ở bước kế tiếp, cần chọn những tên miền mà bạn muốn kích hoạt HTTPS. Các tên miền hiển thị ở đây được tự động lấy từ cấu hình virtual host của Apache, do đó bạn cần đảm bảo đã thiết lập đúng ServerName
và ServerAlias
, đây là bước rất quan trọng. Nếu bạn muốn bật HTTPS cho tất cả các tên miền được liệt kê (được khuyến nghị), hãy để trống và nhấn ENTER
để tiếp tục. Ngược lại, hãy nhập số tương ứng với tên miền mà bạn muốn kích hoạt, phân cách bằng dấu phẩy hoặc khoảng trắng, sau đó nhấn ENTER
:
Which names would you like to activate HTTPS for?
1: your_domain
2: www.your_domain
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Sau bước này, quá trình cấu hình của Certbot sẽ hoàn tất và cần thấy thông báo cuối cùng về chứng chỉ mới được cấp cùng với đường dẫn lưu các tệp cấu hình:
Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain.com
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 hiện đã được cài đặt và nạp vào cấu hình của Apache. Hãy thử tải lại trang web của bạn bằng giao thức https://
và chú ý đến chỉ báo bảo mật trên trình duyệt. Trình duyệt nên hiển thị rằng trang web đã được bảo mật đúng cách, thường là biểu tượng ổ khóa trên thanh địa chỉ.
Bạn có thể sử dụng công cụ SSL Labs Server Test để kiểm tra xếp hạng của chứng chỉ và xem các thông tin chi tiết từ góc nhìn của một dịch vụ bên ngoài.
Ở bước tiếp theo và cũng là bước cuối cùng, cần kiểm tra tính năng tự động gia hạn của Certbot, đảm bảo rằng chứng chỉ sẽ được tự động gia hạn trước khi hết hạn.
Bước 5: Xác minh tính năng tự động gia hạn của Certbot
Các chứng chỉ của Let’s Encrypt chỉ có hiệu lực trong vòng 90 ngày. Chính sách này nhằm khuyến khích người dùng tự động hóa quá trình gia hạn chứng chỉ, đồng thời đảm bảo rằng các chứng chỉ bị lạm dụng hoặc khóa riêng bị đánh cắp sẽ hết hạn trong thời gian ngắn.
Gói certbot
mà bạn đã cài đặt sẽ tự động xử lý việc gia hạn bằng cách cài đặt một script gia hạn tại /etc/cron.d
, do một dịch vụ systemctl
có tên là certbot.timer
quản lý. Script này sẽ chạy hai lần mỗi ngày và tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày trước khi hết hạn.
Để kiểm tra trạng thái của dịch vụ này và đảm bảo tình trạng hoạt động, bạn hãy chạy lệnh sau:
sudo systemctl status certbot.timer
Kết quả nhận được sẽ tương tự như sau:
Output
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>)
Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
Triggers: ● certbot.service
Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.
Để kiểm tra quá trình gia hạn, bạn có thể thực hiện chạy thử bằng lệnh sau:
sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Nếu không có lỗi nào xảy ra, quá trình kiểm tra đã hoàn tất. Khi cần thiết, Certbot sẽ tự động gia hạn chứng chỉ của bạn và tải lại Apache để áp dụng thay đổi. Trong trường hợp quá trình gia hạn tự động bị lỗi, Let’s Encrypt sẽ gửi email cảnh báo đến địa chỉ bạn đã cung cấp khi đăng ký, thông báo về việc chứng chỉ sắp hết hạn.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt công cụ Certbot từ Let’s Encrypt, cấu hình và cài đặt chứng chỉ SSL cho tên miền của mình, đồng thời xác nhận rằng dịch vụ tự động gia hạn của Certbot đang hoạt động trong systemctl
.
Nếu bạn cần thêm thông tin về cách sử dụng Certbot, hãy tham khảo tài liệu chính thức của họ, đây sẽ là một điểm khởi đầu tốt.