Thứ hai, 29/06/2020 | 00:00 GMT+7

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 firewalld cơ 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 .conf là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 A trỏ 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. A ghi DNS A là 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 cho example.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ụng example.comwww.example.com là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:

Output
IMPORTANT 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:

Kiểm tra  server  SSL

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 :

Báo cáo SSL - 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:

Output
Saving 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.


Tags:

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.04
2020-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