Let’s Encrypt là một Certificate Authority (CA) cung cấp cách để lấy và cài đặt các chứng chỉ TLS/SSL miễn phí, từ đó kích hoạt HTTPS mã hoá trên các máy chủ web. Nó đơn giản hoá quá trình này bằng cách cung cấp một phần mềm khách, Certbot, cố gắng tự động hoá hầu hết (nếu không muốn nói là tất cả) các bước cần thiết. Hiện nay, toàn bộ quá trình lấy và cài đặt chứng chỉ đã được tự động hoàn toàn trên cả Apache và Nginx.
Trong bài hướng dẫn này, bạn sẽ sử dụng Certbot để lấy một chứng chỉ SSL miễn phí cho Apache trên Ubuntu 18.04 và xác minh rằng chứng chỉ của bạn được cấu hình tự động gia hạn. DataOnline sẽ hướng dẫn Bạn cài đặt SSL Let’s Encrypt cho Server Apache chạy hệ điều hành Ubuntu
Bài hướng dẫn này sử dụng một file cấu hình Apache Virtual Host riêng thay vì file cấu hình mặc định để thiết lập trang web sẽ được bảo mật bởi Let’s Encrypt. Chúng tôi khuyến nghị tạo các file cấu hình Apache Virtual Host mới cho từng tên miền được host trên máy chủ, vì điều này giúp tránh những sai sót phổ biến và giữ lại các file mặc định như một thiết lập dự phòng.
Yêu cầu tiên quyết
Để hoàn thành bài hướng dẫn này, bạn cần:
- Một máy chủ Ubuntu 18.04 được thiết lập theo hướng dẫn “Thiết Lập Máy Chủ Ban Đầu với Ubuntu 18.04”, bao gồm một người dùng không phải root với quyền sudo và một firewall.
- Một tên miền đã đăng ký đầy đủ. Trong bài hướng dẫn này, chúng tôi sẽ sử dụng your_domain làm ví dụ.
- Hai bản ghi DNS cho máy chủ của bạn. Bạn có thể tham khảo DataOnline DNS để biết cách thêm chúng.
- Một bản ghi A với
your_domaintrỏ đến địa chỉ IP công cộng của máy chủ. - Một bản ghi A với
www.your_domaintrỏ đến địa chỉ IP công cộng của máy chủ.
- Một bản ghi A với
- Apache được cài đặt theo hướng dẫn “Cách Cài Đặt Máy Chủ Web Apache Trên Ubuntu 18.04”. Hãy chắc chắn rằng bạn có một file Virtual Host cho tên miền của mình. Bài hướng dẫn này sẽ sử dụng file
/etc/apache2/sites-available/your_domain.conflàm ví dụ.
Bước 1 — Cài đặt Certbot – Bước đầu tiên cài đặt Apache Let’s Encrypt SSL
Để lấy chứng chỉ SSL với Let’s Encrypt, bạn cần cài đặt phần mềm Certbot trên máy chủ của mình. Trong bài hướng dẫn này, chúng ta sẽ sử dụng kho lưu trữ gói mặc định của Ubuntu để cài đặt Certbot.
Chạy lệnh sau, lệnh này sẽ 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, giúp tự động hoá việc lấy chứng chỉ và cấu hình HTTPS trên máy chủ web chỉ với một lệnh duy nhất:
sudo apt install certbot python3-certbot-apache
Xác nhận cài đặt bằng cách nhấn Y và sau đó nhấn ENTER để chấp nhận. Certbot bây giờ đã được cài đặt trên máy chủ của bạn. Tiếp theo, bạn sẽ kiểm tra cấu hình của Apache để đảm bảo rằng Virtual Host đã được thiết lập chính xác. Điều này giúp script của Certbot có thể phát hiện tên miền của bạn và tự động cấu hình 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 Apache Virtual Host – Cài đặt Apache Let’s Encrypt SSL
Để tự động lấy và cấu hình SSL cho máy chủ web của bạn, Certbot cần có thể định vị được Virtual Host chính xác trong các file 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 định nghĩa trong khối cấu hình VirtualHost.
Nếu bạn đã thực hiện bước thiết lập Virtual Host trong bài hướng dẫn cài đặt Apache, bạn sẽ có một khối VirtualHost cho tên miền của mình tại file /etc/apache2/sites-available/your_domain.conf với chỉ thị ServerName đã được thiết lập chính xác.
Để kiểm tra, mở file Virtual Host cho tên miền của bạn bằng nano (hoặc trình soạn thảo văn 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ó:
/etc/apache2/sites-available/your_domain.conf
... ServerName your_domain; SeverAlias www.your_domain ...
Nếu ServerName và ServerAlias đã được thiết lập, bạn có thể thoát khỏi trình soạn thảo và chuyển sang bước tiếp theo (với nano: nhấn CTRL + X sau đó nhấn Y và ENTER).
Nếu cấu hình Virtual Host hiện tại không khớp, hãy cập nhật cho phù hợp, sau đó lưu và thoát. Tiếp theo, xác thực cấu hình:
sudo apache2ctl configtest
Nếu không có lỗi nào trong cú pháp file Virtual Host, bạn sẽ nhận được thông báo Syntax OK. Nếu có lỗi, hãy mở lại file Virtual Host và kiểm tra các lỗi chính tả hoặc ký tự bị thiếu. Khi cú pháp file cấu hình đã đúng, tải lại Apache để áp dụng cấu hình mới:
sudo systemctl reload apache2
Với những thay đổi này, Certbot sẽ có thể tìm được khối VirtualHost chính xác và cập nhật nó. Tiếp theo, bạn sẽ cập nhật firewall để cho phép lưu lượng HTTPS.
Bước 3 — Cho Phép Lưu Lượng HTTPS Qua Firewall
Nếu bạn đã kích hoạt firewall UFW, như được khuyến nghị ở phần yêu cầu, bạn cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS.
Apache đăng ký một số hồ sơ ứng dụng UFW, và bạn có thể sử dụng hồ sơ Apache Full để cho phép cả lưu lượng HTTP và HTTPS trên máy chủ của bạn. Kiểm tra loại lưu lượng hiện được cho phép trên máy chủ bằng lệnh:
sudo ufw status
Nếu bạn đã theo một trong các hướng dẫn cài đặt Apache của chúng tôi, đầu ra của lệnh sẽ hiển thị như sau (có nghĩa là chỉ có lưu lượng HTTP trên cổng 80 được cho phép):
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)
Để cho phép lưu lượng HTTPS, hãy cho phép hồ sơ Apache Full:
sudo ufw allow 'Apache Full'
Sau đó, xóa bỏ luật Apache không cần thiết:
sudo ufw delete allow 'Apache'
Kiểm tra lại trạng thái:
sudo ufw status
Bạn sẽ nhận được đầu ra như sau:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)
Giờ đây, bạn đã sẵn sàng chạy Certbot và lấy chứng chỉ.
Bước 4 — Lấy Chứng Chỉ SSL
Certbot cung cấp nhiều cách để lấy chứng chỉ SSL thông qua các plugin. Plugin Apache sẽ lo 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, chạy lệnh sau:
sudo certbot --apache
Lệnh này sẽ hiển thị một chuỗi các câu hỏi để cấu hình chứng chỉ SSL của bạn. Đầu tiên, bạn sẽ được yêu cầu cung cấp một địa chỉ email hợp lệ (dùng cho thông báo gia hạn và các thông báo bảo mật):
outputSaving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain
Sau khi cung cấp email hợp lệ, nhấn ENTER để chuyển sang bước tiếp theo. Bạn sẽ được hỏi xác nhậ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 A và ENTER:
outputPlease 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A
Tiếp theo, bạn sẽ được hỏi liệu có muốn chia sẻ địa chỉ email với Electronic Frontier Foundation để nhận tin tức và thông tin khác hay không. Nếu bạn không muốn đăng ký, nhấn N; nếu có, nhấn Y rồi ENTER:
outputWould 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
Sau đó, prompt sẽ thông báo cho Certbot biết bạn muốn kích hoạt HTTPS cho những tên miền nào. Danh sách các tên miền sẽ được lấy tự động từ cấu hình Virtual Host của Apache. Đây là lý do bạn cần kiểm tra cẩn thận các cài đặt ServerName và ServerAlias trong Virtual Host. Nếu bạn muốn kích hoạt HTTPS cho tất cả các tên miền (khuyến nghị), hãy để trống và nhấn ENTER. Nếu không, hãy chọn các tên miền cần kích hoạt bằng cách liệt kê số tương ứng, cách nhau bằng dấu phẩy và/hoặc dấu cách, rồi nhấn ENTER:
outputWhich names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: your_domain 2: 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):
Bạn sẽ nhận được đầu ra như sau:
outputObtaining a new certificate Performing the following challenges: http-01 challenge for your_domain http-01 challenge for your_domain Enabled Apache rewrite module Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf Enabled Apache socache_shmcb module Enabled Apache ssl module Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Tiếp theo, bạn sẽ được hỏi lựa chọn có muốn chuyển hướng lưu lượng HTTP sang HTTPS hay không. Điều này có nghĩa là khi ai đó truy cập trang web của bạn qua kênh không mã hoá (HTTP), họ sẽ tự động được chuyển hướng sang địa chỉ HTTPS. Chọn 2 để kích hoạt chuyển hướng, hoặc 1 nếu bạn muốn giữ HTTP và HTTPS như các phương thức truy cập riêng biệt:
outputPlease 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
Sau khi nhập phản hồi, cấu hình của Certbot sẽ hoàn tất. Bạn sẽ nhận được các thông báo cuối cùng về chứng chỉ mới, vị trí lưu trữ các file được tạo ra và cách kiểm tra cấu hình của bạn bằng một công cụ bên ngoài để phân tích tính xác thực của chứng chỉ:
outputCongratulations! You have successfully enabled https://your_domain and your_domain You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=your_domain https://www.ssllabs.com/ssltest/analyze.html?d=your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 cert will expire on 2022-03-07. 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 chứng chỉ của bạn đã được tải xuống, cài đặt và tích hợ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 cách sử dụng giao thức https:// và chú ý vào biểu tượng bảo mật trên trình duyệt (thường là hình ổ khóa hiển thị trong thanh địa chỉ).
Bạn có thể sử dụng SSL Labs Server Test để xác minh xếp hạng của chứng chỉ và lấy thông tin chi tiết từ góc nhìn của một dịch vụ bên ngoài.
Trong bước tiếp theo, bạn sẽ kiểm tra tính năng tự động gia hạn của Certbot, đảm bảo chứng chỉ của bạn sẽ được tự động gia hạn trước khi hết hạn.
Bước 5 — Kiểm Tra Tính Năng Tự Động Gia Hạn của Certbot
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 hoá quy trình gia hạn chứng chỉ và đảm bảo rằng chứng chỉ bị lạm dụng hoặc khóa bị đánh cắp sẽ hết hạn sớm.
Gói certbot mà bạn đã cài đặt sẽ lo việc gia hạn thông qua việc bao gồm một script gia hạn trong /etc/cron.d, được quản lý bởi dịch vụ systemctl có tên certbot.timer. Script này chạy hai lần mỗi ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn trong vòng 30 ngày đến hạn.
Kiểm tra trạng thái của dịch vụ này và đảm bảo rằng nó đang hoạt động:
sudo systemctl status certbot.timer
Bạn sẽ nhận được đầu ra tương tự như sau:
output● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.
Thử nghiệm quá trình gia hạn bằng cách chạy thử (dry run):
sudo certbot renew --dry-run
Nếu không có lỗi xuất hiện, bạn đã sẵn sàng. Khi cần thiết, Certbot sẽ tự động gia hạn các chứng chỉ và tải lại Apache để cập nhật thay đổi. Nếu quá trình gia hạn tự động thất bại, Let’s Encrypt sẽ gửi thông báo đến email mà bạn đã cung cấp, cảnh báo rằng chứng chỉ sắp hết hạn.
Kết Luận
Trong bài hướng dẫn này, bạn đã cài đặt client Certbot của Let’s Encrypt, cấu hình và cài đặt chứng chỉ SSL cho tên miền của bạn, đồng thời xác minh rằng dịch vụ tự động gia hạn chứng chỉ của Certbot đang hoạt động trong systemctl. 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.

