Ngày đăng: 22 tháng 11 năm 2023
Let's Encrypt là Cơ quan cấp chứng chỉ (Certificate Authority - CA) cung cấp cách lấy và cài đặt chứng chỉ TLS/SSL miễn phí, từ đó cho phép HTTPS được mã hóa trên máy chủ web. Nó hợp lý hóa quy trình bằng cách cung cấp một software client (phần mềm máy khách), Certbot, cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt chứng chỉ hoàn toàn tự động trên cả Apache và Nginx.
Trong hướng dẫn này, bạn sẽ sử dụng Certbot để nhận 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 thiết lập để tự động gia hạn.
Hướng dẫn này sử dụng tệp máy chủ ảo Apache riêng thay vì tệp cấu hình mặc định để thiết lập trang web sẽ được bảo mật bằng Let's Encrypt. Chúng tôi khuyên bạn nên tạo các tệp máy chủ ảo Apache mới cho từng miền được lưu trữ trên một máy chủ vì việc này giúp tránh các lỗi phổ biến và duy trì các tệp mặc định dưới dạng thiết lập dự phòng.
Để hoàn thành hướng dẫn này, bạn sẽ cần:
Một máy chủ Ubuntu 18.04 được thiết lập bằng cách làm theo hướng dẫn thiết lập máy chủ ban đầu này cho Ubuntu 18.04, bao gồm sudo non-root user và tường lửa.
Một tên miền được đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng your_domain làm ví dụ xuyên suốt. Bạn có thể mua tên miền tại CloudFly, nhận tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
Cả hai bản ghi DNS sau đây đều được thiết lập cho máy chủ của bạn.
your_domain
trỏ đến địa chỉ IP công cộng của máy chủ của bạn.www.your_domain
trỏ đến địa chỉ IP công cộng của máy chủ của bạn.Apache được cài đặt bằng cách làm theo Cách cài đặt Apache trên Ubuntu 18.04. Hãy đảm bảo rằng bạn có tệp máy chủ ảo cho miền của mình. Hướng dẫn này sẽ sử dụng /etc/apache2/sites-available/your_domain.conf
làm ví dụ.
Để có được 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. Đối với hướng dẫn này, chúng tôi sẽ sử dụng kho lưu trữ Ubuntu package mặc định để cài đặt Certbot.
Chạy lệnh sau để cài đặt hai gói: certbot
và python3-certbot-apache
. Cái sau là một plugin tích hợp Certbot với Apache, để có thể tự động lấy chứng chỉ và định cấu hình HTTPS trong máy chủ web của bạn chỉ bằng một lệnh:
- sudo apt install certbot python3-certbot-apache
Xác nhận cài đặt bằng cách nhấn Y
rồi ENTER
để chấp nhận.
Certbot hiện đã được cài đặt trên máy chủ của bạn. Tiếp theo, bạn sẽ xác minh cấu hình của Apache để đảm bảo máy chủ ảo của bạn được đặt phù hợp. Điều này đảm bảo rằng tập lệnh máy khách certbot
sẽ có thể phát hiện miền của bạn và định cấu hình lại máy chủ web của bạn để tự động sử dụng chứng chỉ SSL mới được tạo.
Để tự động lấy và định cấu hình SSL cho máy chủ web của bạn, Certbot cần có khả năng định vị đúng máy chủ ảo trong tệp cấu hình Apache của bạn. (Các) tên miền máy chủ của bạn sẽ được truy xuất từ các lệnh ServerName
và ServerAlias
được xác định trong khối cấu hình Virtualhost của bạn.
Nếu bạn đã làm theo bước thiết lập máy chủ ảo trong hướng dẫn cài đặt Apache, bạn sẽ có khối VirtualHost (VirtualHost block) cho miền của mình tại /etc/apache2/sites-available/your_domain.conf
với lệnh ServerName
đã được đặt thích hợp.
Để kiểm tra, hãy mở tệp máy chủ ảo cho miền của bạn bằng nano
hoặc trình soạn thảo văn bản yêu thích của bạn:
- sudo nano /etc/apache2/sites-available/your_domain.conf
Tìm dòng ServerName
và ServerAlias
hiện có:
...
ServerName your_domain;
SeverAlias www.your_domain
...
Nếu ServerName
và ServerAlias
của bạn đã được thiết lập thì bạn có thể thoát khỏi trình soạn thảo văn bản và chuyển sang bước tiếp theo. Nếu bạn đang sử dụng nano
, bạn có thể thực hiện việc này bằng cách nhấn CTRL + X
rồi Y
và ENTER
.
Nếu cấu hình máy chủ ảo hiện tại của bạn không khớp, hãy cập nhật nó cho phù hợp. Sau đó, lưu và thoát khỏi trình soạn thảo văn bản. Tiếp theo, xác thực các thay đổi của bạn:
- sudo apache2ctl configtest
Nếu không có bất kỳ lỗi nào với cú pháp của tệp máy chủ ảo, bạn sẽ nhận được phản hồi Syntax OK
. Nếu bạn gặp lỗi, hãy mở lại tệp máy chủ ảo và kiểm tra xem có lỗi chính tả hoặc thiếu ký tự nào không. Khi cú pháp của tệp cấu hình của bạn đúng, hãy tải lại Apache để tải cấu hình mới:
- sudo systemctl reload apache2
Với những thay đổi này có hiệu lực, Certbot sẽ có thể tìm thấy khối Virtualhost chính xác và cập nhật nó.
Tiếp theo, bạn sẽ cập nhật tường lửa để cho phép lưu lượng HTTPS.
Nếu bạn đã bật tường lửa UFW, như được khuyến nghị trong các hướng dẫn tiên quyết, bạn sẽ cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. Apache đăng ký một số cấu hình ứng dụng UFW và bạn có thể tận dụng cấu hình Apache Full để cho phép cả lưu lượng HTTP và HTTPS trên máy chủ của mình.
Xác minh loại lưu lượng truy cập hiện được phép trên máy chủ của bạn bằng cách chạy như sau:
- sudo ufw status
Nếu bạn làm theo một trong các hướng dẫn cài đặt Apache của chúng tôi, đầu ra của bạn sẽ tạo ra kết quả như sau, điều này có nghĩa là chỉ cho phép lưu lượng HTTP trên cổng 80
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Ngoài ra, để cho phép lưu lượng HTTPS, hãy cho phép cấu hình Apache Full
:
- sudo ufw allow 'Apache Full'
Sau đó, xóa dự phòng cấu hình Apache
dư thừa:
- sudo ufw delete allow 'Apache'
Kiểm tra lại trạng thái:
- sudo ufw status
Bạn sẽ nhận được kết quả đầu ra sau:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Bây giờ bạn đã sẵn sàng chạy Certbot và nhận chứng chỉ của mình.
Certbot cung cấp nhiều cách khác nhau để lấy chứng chỉ SSL thông qua 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 bất cứ khi nào cần thiết. Để sử dụng plugin này, hãy chạy như sau:
- sudo certbot --apache
Lệnh này sẽ tạo lời nhắc kèm theo một loạt câu hỏi để định cấu hình chứng chỉ SSL của bạn. Trước tiên, bạn sẽ được yêu cầu cung cấp địa chỉ email hợp lệ, địa chỉ này nhằm mục đích thông báo gia hạn và 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 bạn đã cung cấp địa chỉ email hợp lệ, hãy nhấn ENTER
và chuyển sang bước tiếp theo. Bạn sẽ được yêu cầu xác nhận xem bạn có đồng ý với điều khoản dịch vụ của Let's Encrypt hay không. 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 bạn có muốn chia sẻ email của mình với Electronic Frontier Foundation để nhận tin tức và thông tin khác hay không. Nếu không muốn đăng ký thì nhấn N
, nếu không thì nhấn Y
rồi ENTER
để chuyển sang bước tiếp theo:
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
Lời nhắc sẽ thông báo cho Certbot về những miền bạn muốn kích hoạt HTTPS. Danh sách tên miền được tự động lấy từ cấu hình máy chủ ảo Apache của bạn. Đây là lý do tại sao điều quan trọng là phải xác nhận rằng bạn đã định cấu hình đúng cài đặt ServerName
và ServerAlias
trong máy chủ ảo của mình. 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 lời nhắc và nhấn ENTER
để tiếp tục. Nếu không, hãy chọn miền bạn muốn bật HTTPS bằng cách liệt kê từng số thích hợp, phân tách bằng dấu phẩy và/hoặc dấu cách, sau đó 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 kết quả đầu ra 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 yêu cầu chọn xem bạn có muốn lưu lượng truy cập HTTP được chuyển hướng đến HTTPS hay không. Điều này có nghĩa là khi ai đó truy cập trang web của bạn thông qua các kênh không được mã hóa (HTTP), họ sẽ tự động được chuyển hướng đến địa chỉ HTTPS của trang web của bạn. Chọn 2
để bật chuyển hướng hoặc 1
nếu bạn muốn giữ HTTP và HTTPS làm phương thức riêng biệt để truy cập trang web của mình:
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ủa bạn, quá trình cấu hình của Certbot sẽ hoàn tất. Bạn sẽ nhận được nhận xét cuối cùng về chứng chỉ mới của mình, nơi tìm các tệp được tạo và cách kiểm tra cấu hình của bạn bằng 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
Chứng chỉ của bạn được tải xuống, cài đặt và tải vào cấu hình của Apache. Hãy thử tải lại trang web của bạn bằng https://
và chú ý đến chỉ báo bảo mật của trình duyệt. Nó phải chỉ ra rằng trang web được bảo mật đúng cách, thường có biểu tượng khóa trên thanh địa chỉ.
Bạn có thể sử dụng SSL Labs Server Test để xác minh cấp chứng chỉ của mình và nhận thông tin chi tiết về chứng chỉ đó từ góc độ 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, tính năng này đảm bảo chứng chỉ của bạn sẽ tự động gia hạn trước ngày hết hạn.
Chứng chỉ Let's Encrypt chỉ có hiệu lực trong chín mươi ngày. Điều này nhằm khuyến khích người dùng tự động hóa quy trình gia hạn chứng chỉ của họ và đảm bảo rằng các chứng chỉ bị sử dụng sai hoặc khóa bị đánh cắp sẽ sớm hết hạn.
Gói certbot
bạn đã cài đặt đảm nhiệm việc gia hạn bằng cách thêm tập lệnh gia hạn vào /etc/cron.d
, tập lệnh này được quản lý bởi dịch vụ systemctl
có tên là certbot.timer
. Tập lệnh này chạy hai lần một ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào trong vòng ba mươi ngày kể từ ngày hết 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 và đang chạy:
- sudo systemctl status certbot.timer
Bạn sẽ nhận được kết quả 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.
Kiểm tra quy trình gia hạn bằng cách chạy thử với certbot
:
- sudo certbot renew --dry-run
Nếu bạn không nhận được lỗi nào, bạn đã hoàn tất. Khi cần, Certbot sẽ gia hạn chứng chỉ của bạn và tải lại Apache để xử lý các thay đổi. Nếu quá trình gia hạn tự động không thành công, Let's Encrypt sẽ gửi thông báo đến email bạn đã chỉ định, cảnh báo bạn khi chứng chỉ của bạn sắp hết hạn.
Trong hướng dẫn này, bạn đã cài đặt certbot
máy khách Let's Encrypt, định cấu hình và cài đặt chứng chỉ SSL cho miền của mình, đồng thời xác nhận dịch vụ gia hạn chứng chỉ tự động 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 tốt để bắt đầu.