Cách bảo mật Apache bằng Let's Encrypt trên CentOS 8
Let's Encrypt là Tổ chức phát hành certificate (CA) tạo điều kiện cho việc 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 các web server . Nó đơn giản hóa quy trình bằng cách làm việc với khách hàng, chẳng hạn như Certbot , để tự động hóa các bước cần thiết.Trong hướng dẫn này, bạn sẽ sử dụng Certbot để cài đặt certificate TLS / SSL với web server Apache trên CentOS 8. Ngoài ra, bạn sẽ tự động hóa quy trình gia hạn certificate bằng cron job, bạn có thể tìm hiểu thêm bằng cách đọc Cách sử dụng Cron Để Tự động hóa Công việc trên CentOS 8 .
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
-  Một  server  CentOS 8 với  user  không hỗ trợ sudo root và một firewalldcơ bản được cài đặt theo hướng dẫn cài đặt server ban đầu CentOS 8 .
-  Apache được cài đặt trên  server  có  server  ảo được  cấu hình  cho domain  của bạn. Bạn có thể tìm hiểu cách  cài đặt  điều này  theo  hướng dẫn của  ta  Cách cài đặt  web server  Apache trên CentOS 8 . Đảm bảo rằng bạn đã  cài đặt  một  server  ảo cho domain   của bạn . Hướng dẫn này sẽ sử dụng /etc/httpd/sites-available/ example.com .conflàm ví dụ.
- Bạn nên sở hữu hoặc kiểm soát domain đã đăng ký mà bạn muốn sử dụng certificate . Nếu bạn chưa có domain đã đăng ký, bạn có thể mua một 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.
-  Bản ghi DNS Atrỏ domain của bạn đến địa chỉ IP công cộng của server của bạn. Nếu bạn lưu trữ domain của bạn thông qua DigitalOcean, bạn có thể tham khảo tài liệu DNS DigitalOcean để biết chi tiết về cách thêm các bản ghi này với nền tảng DigitalOcean.Aghi DNSAlà bắt buộc vì cách Let's Encrypt xác thực rằng bạn sở hữu domain mà nó đang cấp certificate . Ví dụ: nếu bạn muốn lấy certificate choexample.com, thì domain đó phải phân giải tới server của bạn để quá trình xác thực hoạt động. Cài đặt của ta sẽ sử dụngexample.comvàwww.example.comlàm domain , cả hai đều sẽ yêu cầu bản ghi DNS hợp lệ.
Khi bạn đã hoàn thành tất cả các yêu cầu này, hãy chuyển sang cài đặt phần mềm khách Certbot.
Bước 1 - Cài đặt Certbot Let's Encrypt Client
 Để sử dụng Let's Encrypt để lấy certificate  SSL, trước tiên bạn cần cài đặt Certbot và mod_ssl , một module  Apache cung cấp hỗ trợ cho mã hóa SSLv3.
 Gói certbot không có sẵn thông qua trình quản lý gói theo mặc định. Bạn  cần  kích hoạt kho EPEL để cài đặt Certbot.
Để thêm repository CentOS 8 EPEL, hãy chạy lệnh sau:
- sudo dnf install epel-release 
Đến đây bạn có quyền truy cập vào repository , hãy cài đặt tất cả các gói được yêu cầu:
- sudo dnf install certbot python3-certbot-apache mod_ssl 
Với các dịch vụ này đã được cài đặt, bây giờ bạn đã sẵn sàng chạy Certbot và tìm nạp certificate của bạn .
Bước 2 - Lấy certificate
Bây giờ Certbot đã được cài đặt, bạn có thể sử dụng nó để certificate request SSL cho domain của bạn .
 Việc sử dụng  ứng dụng client  certbot Let's Encrypt để tạo Chứng chỉ SSL cho Apache sẽ tự động hóa nhiều bước trong quy trình. Máy khách sẽ tự động lấy và cài đặt certificate  SSL mới hợp lệ cho các domain  bạn cung cấp dưới dạng tham số.
 Để thực hiện cài đặt tương tác và lấy certificate  chỉ bao gồm một domain  duy nhất, hãy chạy lệnh certbot với:
- sudo certbot --apache -d example.com 
Điều này chạy certbot với plugin --apache và chỉ định domain  để  cấu hình  certificate  với cờ -d .
 Nếu bạn muốn cài đặt một certificate  hợp lệ cho nhiều domain  hoặc domain  phụ, bạn có thể chuyển chúng dưới dạng tham số bổ sung cho lệnh, gắn thẻ từng domain  hoặc domain  phụ mới bằng cờ -d . Tên domain  đầu tiên trong danh sách các tham số sẽ là domain  cơ sở được Let's Encrypt sử dụng để tạo certificate . Vì lý do này, hãy chuyển domain  cơ sở đầu tiên trong danh sách, sau đó là bất kỳ domain  phụ hoặc alias  bổ sung nào:
- sudo certbot --apache -d example.com -d www.example.com 
Miền cơ sở trong ví dụ này là example.com .
 Tiện ích certbot cũng có thể nhắc bạn chọn domain  dựa trên cấu hình Apache hiện có của bạn. Để sử dụng chức năng này, hãy gọi certbot mà không có bất kỳ domain  nào được chỉ định:
- sudo certbot --apache 
Chương trình sẽ giới thiệu cho bạn hướng dẫn từng bước để tùy chỉnh các tùy chọn certificate  của bạn. Nó sẽ yêu cầu bạn cung cấp địa chỉ email để khôi phục khóa bị mất và thông báo, sau đó nhắc bạn đồng ý với các điều khoản dịch vụ. Nếu bạn không chỉ định domain   của bạn  trên dòng lệnh, bạn cũng sẽ  được yêu cầu  về điều đó. Nếu file   Server  ảo của bạn không chỉ định domain  mà chúng phân phối rõ ràng bằng cách sử dụng lệnh ServerName ,  bạn cần  chọn file   server  ảo.
Khi quá trình cài đặt kết thúc thành công, bạn sẽ thấy một thông báo tương tự như sau:
OutputIMPORTANT NOTES:  - Congratulations! Your certificate and chain have been saved at:    /etc/letsencrypt/live/example.com/fullchain.pem    Your key file has been saved at:    /etc/letsencrypt/live/example.com/privkey.pem    Your cert will expire on 2020-09-24. 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 Các file  certificate  được tạo sẽ có sẵn trong một folder  con được đặt tên theo domain  cơ sở của bạn trong folder  /etc/letsencrypt/live .
Bây giờ certificate của bạn đã được download , cài đặt và tải, bạn có thể kiểm tra trạng thái certificate SSL của bạn đảm bảo rằng mọi thứ đang hoạt động.
Bước 3 - Kiểm tra certificate và cấu hình SSL
Đến đây, bạn có thể đảm bảo Certbot đã tạo đúng certificate SSL của bạn bằng cách sử dụng Kiểm tra server SSL từ công ty bảo mật cloud Qualys .
 Mở liên kết sau trong trình duyệt web  bạn muốn , thay thế example.com bằng domain  của bạn:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com Bạn sẽ đến một trang ngay lập tức bắt đầu kiểm tra kết nối SSL với server của bạn:
Sau khi kiểm tra bắt đầu chạy, có thể mất vài phút để hoàn thành. Trạng thái của bài kiểm tra sẽ cập nhật trong trình duyệt của bạn.
Khi quá trình kiểm tra kết thúc, trang sẽ hiển thị loại chữ cái đánh giá độ bảo mật và chất lượng của cấu hình server của bạn. Tại thời điểm viết bài này, các cài đặt mặc định sẽ đưa ra xếp hạng A :
Để biết thêm thông tin về cách SSL Labs xác định các điểm này, hãy xem bài đăng Phân loại SSL Labs nêu chi tiết các cập nhật được thực hiện đối với sơ đồ chấm điểm vào tháng 1 năm 2018.
 Hãy thử  reload   trang web  bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Bây giờ nó sẽ cho biết rằng trang web được bảo mật đúng cách, thường có biểu tượng khóa.
Với certificate SSL của bạn đã được cài đặt và xác minh, bước tiếp theo là cài đặt tự động gia hạn cho certificate của bạn để giữ cho certificate của bạn hợp lệ.
Bước 4 - Cài đặt Tự động gia hạn
Chứng chỉ Let's Encrypt có hiệu lực trong 90 ngày, nhưng bạn nên kiểm tra gia hạn hai lần một ngày trong trường hợp thu hồi hoặc sự cố khác. Bởi vì điều này, nó là một thực tiễn tốt nhất để tự động hóa quá trình này.
 Đầu tiên, hãy kiểm tra lệnh mà bạn sẽ sử dụng để gia hạn certificate . Máy khách certbot Let's Encrypt có lệnh renew tự động kiểm tra các certificate  hiện đã được cài đặt và cố gắng gia hạn chúng nếu chúng còn cách ngày hết hạn chưa đầy 30 ngày. Bằng cách sử dụng tùy chọn --dry-run , bạn có thể chạy mô phỏng của tác vụ này để kiểm tra cách hoạt động của renew :
- sudo certbot renew --dry-run 
Đầu ra sẽ giống như sau:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator apache, Installer apache Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges Resetting dropped connection: acme-staging-v02.api.letsencrypt.org  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry **          (The test certificates below have not been saved.)  Congratulations, all renewals succeeded. The following certs have been renewed:   /etc/letsencrypt/live/example.com/fullchain.pem (success) ... Lưu ý nếu bạn đã tạo certificate gói với nhiều domain , thì chỉ domain cơ sở mới được hiển thị trong kết quả , nhưng việc gia hạn sẽ có hiệu lực đối với tất cả các domain có trong certificate này.
Một cách thực tế đảm bảo certificate của bạn sẽ không bị lỗi thời là tạo một công việc cron sẽ thực hiện định kỳ lệnh gia hạn tự động cho bạn.
 Tài liệu chính thức của Certbot khuyên bạn nên chạy cron hai lần mỗi ngày. Điều này sẽ  đảm bảo , trong trường hợp Let's Encrypt bắt đầu thu hồi certificate , sẽ không có quá nửa ngày trước khi Certbot gia hạn certificate  của bạn. Tài liệu đề xuất sử dụng lệnh sau để thêm một cron việc cron thích hợp vào file  /etc/crontab crontab:
- echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null 
Thao tác này sẽ tạo một công việc cron mới sẽ thực thi vào buổi trưa và nửa đêm hàng ngày ( 0 0,12 * * * ). Sau đó, nó sẽ chạy tập lệnh python3 ngắn, tạm dừng trong một khoảng thời gian ngẫu nhiên từ 0 đến 60 phút. Điều này  được khuyến khích  để giảm tải trên các  server  của Let's Encrypt.
 Sau khi tập lệnh python thoát, lệnh certbot renew thực tế sẽ chạy.
Để biết thêm thông tin về cách tạo và lập lịch công việc cron, bạn có thể xem hướng dẫn Cách sử dụng Cron Để Tự động hóa Công việc trên CentOS 8 của ta . Thông tin chi tiết hơn về gia hạn có thể được tìm thấy trong tài liệu Certbot .
Kết luận
Trong hướng dẫn này, bạn đã cài đặt ứng dụng Let's Encrypt Certbot, download certificate SSL cho domain của bạn và cài đặt gia hạn certificate tự động. Nếu bạn có câu hỏi nào về việc sử dụng Certbot, bạn có thể kiểm tra tài liệu Certbot chính thức. Ta cũng khuyên bạn nên kiểm tra blog Let's Encrypt chính thức để biết các cập nhật quan trọng theo thời gian.
Các tin liên quan
Cách cấu hình Apache HTTP với MPM Event và PHP-FPM trên Ubuntu 18.042020-05-13
Cách cài đặt web server Apache trên CentOS 8 [Quickstart]
2020-05-08
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 20.04
2020-04-29
Cách cài đặt web server Apache trên Ubuntu 20.04 [Quickstart]
2020-04-28
Cách cài đặt web server Apache trên Ubuntu 20.04
2020-04-27
Cách cài đặt web server Apache trên CentOS 8
2020-04-24
Cách thiết lập server ảo Apache trên Ubuntu 18.04 [Quickstart]
2020-02-19
Các bước được đề xuất để ngăn chặn HTTP Apache trên FreeBSD 12.0
2020-02-12
Cách thiết lập server ảo Apache trên Ubuntu 18.04
2020-02-10
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 18.04 [Quickstart]
2020-02-04
 

