Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 18.04
Let's Encrypt là Tổ chức phát hành certificate (CA) cung cấp cách dễ dàng để lấy và cài đặt chứng chỉ TLS / SSL miễn phí, do đó cho phép HTTPS được mã hóa trên web server . Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng client , 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 certificate 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 để lấy certificate SSL miễn phí cho Apache trên Ubuntu 18.04 và cài đặt tự động gia hạn certificate của bạn.
Hướng dẫn này sẽ sử dụng file server ảo Apache riêng biệt thay vì file cấu hình mặc định. Ta khuyên bạn nên tạo file server ảo Apache mới cho từng domain vì nó giúp tránh các lỗi thường gặp và duy trì file mặc định dưới dạng cấu hình dự phòng.
Yêu cầu
Để làm theo hướng dẫn này, bạn cần :
Một server Ubuntu 18.04 được cài đặt theo cài đặt server ban đầu này cho hướng dẫn Ubuntu 18.04 , bao gồm user không phải root có quyền sudo và firewall .
Tên domain đã đă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 domain trên Namecheap , nhận một domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký domain mà bạn chọn.
Cả hai bản ghi DNS sau được cài đặt cho server của bạn. Bạn có thể theo dõi phần giới thiệu này về DigitalOcean DNS để biết chi tiết về cách thêm chúng.
- Một bản ghi với
your_domain
trỏ đến địa chỉ IP công cộng của server của bạn. - Một bản ghi A với
www. your_domain
trỏ đến địa chỉ IP công cộng của server của bạn.
- Một bản ghi với
Đã cài đặt Apache theo Cách cài đặt Apache trên Ubuntu 18.04 . Đảm bảo rằng bạn có tệp server ảo cho domain của bạn . Hướng dẫn này sẽ sử dụng
/etc/apache2/sites-available/ your_domain .conf
làm ví dụ.
Bước 1 - Cài đặt Certbot
Bước đầu tiên để sử dụng Let's Encrypt để lấy certificate SSL là cài đặt phần mềm Certbot trên server của bạn.
Certbot đang trong quá trình phát triển rất tích cực, vì vậy các gói Certbot do Ubuntu cung cấp có xu hướng lỗi thời. Tuy nhiên, các nhà phát triển Certbot duy trì một repository Ubuntu với các version cập nhật, vì vậy ta sẽ sử dụng kho đó thay thế.
Đầu tiên, thêm repository :
- sudo add-apt-repository ppa:certbot/certbot
Bạn cần nhấn ENTER
để chấp nhận.
Cài đặt gói Apache của Certbot với apt
:
- sudo apt install python-certbot-apache
Certbot hiện đã sẵn sàng để sử dụng, nhưng để nó cấu hình SSL cho Apache, ta cần xác minh một số cấu hình của Apache.
Bước 2 - Cài đặt certificate SSL
Certbot cần có khả năng tìm đúng server ảo trong cấu hình Apache của bạn để nó tự động cấu hình SSL. Cụ thể, nó thực hiện điều này bằng cách tìm kiếm lệnh ServerName
phù hợp với domain mà bạn certificate request .
Nếu bạn đã làm theo bước cài đặt server ảo trong hướng dẫn cài đặt Apache , bạn sẽ có đoạn VirtualHost cho domain của bạn tại /etc/apache2/sites-available/ your_domain.com .conf
với lệnh ServerName
đã được cài đặt thích hợp.
Để kiểm tra, hãy mở file server ảo cho domain của bạn bằng nano
hoặc editor yêu thích của bạn:
- sudo nano /etc/apache2/sites-available/your_domain.conf
Tìm dòng ServerName
hiện có. Nó sẽ giống như thế này:
... ServerName your_domain; ...
Nếu có, hãy thoát khỏi editor và chuyển sang bước tiếp theo.
Nếu không, hãy cập nhật nó để phù hợp. Sau đó, lưu file , thoát khỏi editor và xác minh cú pháp của các chỉnh sửa cấu hình của bạn:
- sudo apache2ctl configtest
Nếu bạn gặp lỗi, hãy mở lại file server ảo và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu nào không. Khi cú pháp của file cấu hình của bạn chính xác, hãy reload Apache để tải cấu hình mới:
- sudo systemctl reload apache2
Certbot hiện có thể tìm thấy đoạn VirtualHost chính xác và cập nhật nó.
Tiếp theo, hãy cập nhật firewall để cho phép truy cập HTTP S.
Bước 3 - Cho phép HTTPS thông qua firewall
Nếu bạn đã bật firewall ufw
, theo khuyến nghị của hướng dẫn yêu cầu , bạn cần điều chỉnh cài đặt để cho phép lưu lượng truy cập HTTPS. May mắn là Apache đăng ký một số cấu hình với ufw
khi cài đặt.
Bạn có thể xem cài đặt hiện tại bằng lệnh :
- sudo ufw status
Nó có thể sẽ giống như thế này, nghĩa là chỉ truy cập HTTP được phép đến web server :
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 truy cập HTTPS, hãy cho phép profile Apache Full và xóa phụ cấp profile Apache dư thừa:
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
Trạng thái của bạn bây giờ sẽ giống như sau:
- sudo ufw status
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)
Tiếp theo, hãy chạy Certbot và tìm nạp certificate của ta .
Bước 4 - Lấy certificate SSL
Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL thông qua các plugin. Plugin Apache sẽ xử lý cấu hình lại Apache và reload cấu hình khi nào cần thiết. Để sử dụng plugin này, hãy nhập như sau:
- sudo certbot --apache -d your_domain -d www.your_domain
Điều này chạy certbot
với plugin --apache
, sử dụng -d
để chỉ định tên bạn muốn certificate hợp lệ.
Nếu đây là lần đầu tiên bạn chạy certbot
, bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, certbot
sẽ giao tiếp với server Let's Encrypt, sau đó chạy thử thách để xác minh bạn kiểm soát domain mà bạn đang certificate request .
Nếu thành công, certbot
sẽ hỏi bạn muốn cấu hình cài đặt HTTPS của bạn như thế nào:
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):
Chọn lựa chọn của bạn rồi nhấn ENTER
. Cấu hình sẽ được cập nhật và Apache sẽ reload để chọn cài đặt mới. certbot
sẽ kết thúc bằng một thông báo cho bạn biết quá trình đã thành công và nơi lưu trữ certificate của bạn:
OutputIMPORTANT 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 2018-07-23. 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
Chứng chỉ của bạn đã được download , cài đặt và tải. Hãy thử reload trang web bằng https://
và để ý chỉ báo bảo mật của trình duyệt. Nó phải cho biết rằng trang web được bảo mật đúng cách, thường có biểu tượng ổ khóa màu xanh lục. Nếu bạn kiểm tra server của bạn bằng Kiểm tra server SSL Labs, server sẽ đạt điểm A.
Hãy kết thúc bằng cách thử nghiệm quá trình gia hạn.
Bước 5 - Xác minh Tự động gia hạn Certbot
Các certbot
gói ta cài đặt sẽ chăm sóc của gia hạn bằng cách bao gồm một kịch bản mới để /etc/cron.d
, được quản lý bởi một systemctl
dịch vụ gọi 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ỳ certificate 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 nó đang đang chạy , bạn có thể sử dụng:
- 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: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle 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ử nghiệm với certbot
:
- sudo certbot renew --dry-run
Nếu bạn không thấy lỗi, bạn đã hoàn tất. Khi cần thiết, Certbot sẽ gia hạn certificate của bạn và reload Apache để áp dụng 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 một thông báo đến email bạn đã chỉ định, cảnh báo cho bạn khi certificate của bạn sắp hết hạn.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt certbot
client Let's Encrypt, download certificate SSL cho domain của bạn, cấu hình Apache để sử dụng các certificate này và cài đặt gia hạn certificate tự động. 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à một nơi tốt để tham khảo .
Các tin liên quan
Lỗi cấu hình Apache AH00558: Không thể xác định một cách đáng tin cậy tên miền đủ điều kiện của server2020-08-06
Lỗi cấu hình Apache AH02572: Không thể cấu hình ít nhất một chứng chỉ và khóa
2020-08-06
Lỗi mạng Apache AH00072: make_sock: không thể liên kết với địa chỉ
2020-07-30
Cách khắc phục các lỗi Apache thường gặp
2020-07-30
Lỗi cấu hình Apache AH00526: Lỗi cú pháp
2020-07-30
Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 20.04
2020-07-06
Cách tạo chứng chỉ SSL tự ký cho Apache trên CentOS 8
2020-06-30
Cách bảo mật Apache bằng Let's Encrypt trên CentOS 8
2020-06-29
Cách cấu hình Apache HTTP với MPM Event và PHP-FPM trên Ubuntu 18.04
2020-05-13
Cách cài đặt web server Apache trên CentOS 8 [Quickstart]
2020-05-08