Cách bảo mật Apache bằng Let's Encrypt trên Debian 10
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 Debian 10 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 Debian 10 được cài đặt theo hướng dẫn cài đặt server ban đầu này cho Debian 10 , bao gồm user không phải root có quyền - sudovà 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. Để cài đặt các tên domain này, bạn có thể làm theo các hướng dẫn này để thêm domain và sau đó là các hướng dẫn tạo bản ghi DNS . -  Một bản ghi với your_domaintrỏ đế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_domaintrỏ đế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 Debian 10 . Đảm bảo rằng bạn đã cài đặt 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 .conflà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.
 Theo cách viết này, theo mặc định, Certbot không có sẵn trong repository  Debian. Để  download  phần mềm bằng apt , bạn  cần  thêm repository  backports vào file  sources.list  của bạn  nơi apt tìm kiếm các nguồn gói. Backports là các gói từ thử nghiệm của Debian và các bản phân phối không ổn định được biên dịch lại để chúng sẽ chạy mà không có thư viện mới trên các bản phân phối Debian ổn định.
 Để thêm repository  backports, hãy mở (hoặc tạo) file  sources.list trong folder  /etc/apt/ :
- sudo nano /etc/apt/sources.list 
Ở cuối file , thêm dòng sau:
. . . deb http://mirrors.digitalocean.com/debian buster-backports main deb-src http://mirrors.digitalocean.com/debian buster-backports main deb http://ftp.debian.org/debian buster-backports main Điều này bao gồm các gói main ,  tuân theo  Nguyên tắc Phần mềm Miễn phí Debian (DFSG) , cũng như các thành phần contrib và non-free , bản thân chúng không  tuân theo  DFSG hoặc bao gồm các thành phần phụ thuộc trong danh mục này.
  Lưu file   bằng cách nhấn CTRL+X , Y , sau đó ENTER , sau đó cập nhật danh sách gói của bạn:
- sudo apt update 
Sau đó cài đặt Certbot bằng lệnh sau.  Lưu ý  tùy chọn -t yêu cầu apt tìm kiếm gói bằng cách tìm trong repository  lưu trữ backports mà bạn vừa thêm:
- sudo apt install python-certbot-apache -t buster-backports 
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 Apache đã được cấu hình chính xác.
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ó một khối VirtualHost cho domain   của bạn  tại /etc/apache2/sites-available/ your_domain .conf với chỉ thị ServerName đã được đặt phù 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ẽ trông như thế này, với domain   của bạn  thay vì your_domain :
... ServerName your_domain; ... Nếu nó chưa có, hãy cập nhật lệnh ServerName để trỏ đến domain  của bạn. 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 không có bất kỳ lỗi cú pháp nào, bạn sẽ thấy điều này trong kết quả của bạn :
OutputSyntax OK 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 khối 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à  khi được cài đặt trên Debian, ufw được đóng gói với một số cấu hình giúp đơn giản hóa quá trình thay đổi  luật  firewall  cho  truy cập HTTP  và HTTPS.
Bạn có thể xem cài đặt hiện tại bằng lệnh :
- sudo ufw status 
Nếu bạn đã làm theo Bước 2 trong hướng dẫn của ta về Cách cài đặt Apache trên Debian 10 , kết quả của lệnh này sẽ trông giống như thế này, cho thấy rằng chỉ truy cập HTTP được phép đến web server :
OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere                   WWW                        ALLOW       Anywhere                   OpenSSH (v6)               ALLOW       Anywhere (v6)              WWW (v6)                   ALLOW       Anywhere (v6) Ngoài ra, để cho phép lưu lượng truy cập HTTPS, hãy cho phép cấu hình “WWW Đầy đủ” và xóa phụ cấp cấu hình “WWW” dư thừa:
- sudo ufw allow 'WWW Full' 
- sudo ufw delete allow 'WWW' 
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                   WWW Full                   ALLOW       Anywhere                   OpenSSH (v6)               ALLOW       Anywhere (v6)              WWW 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 các tên mà 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ụ. Ngoài ra, nó sẽ hỏi  bạn có  sàng chia sẻ địa chỉ email  của bạn  với Electronic Frontier Foundation , một tổ chức phi lợi nhuận ủng hộ quyền kỹ thuật số và cũng là nhà production  Certbot hay không. Vui lòng nhập Y để chia sẻ địa chỉ email của bạn hoặc N để từ chối.
 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 tự động 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 2019-10-20. 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
 Chứng chỉ Let's Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích  user  tự động hóa quy trình gia hạn certificate  của họ. Gói certbot mà  ta  đã cài đặt sẽ giải quyết việc này cho  ta  bằng cách thêm tập lệnh gia hạn vào /etc/cron.d . 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 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
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 18.04
2020-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 cấu hình Apache AH00526: Lỗi cú pháp
2020-07-30
Cách khắc phục các lỗi Apache thường gặp
2020-07-30
Lỗi mạng Apache AH00072: make_sock: không thể liên kết với địa chỉ
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
 

