Thứ bảy, 19/09/2020 | 18:49 GMT+7

Bảo mật Apache với Lets Encrypt trên Centos 8

Let's Encrypt là Tổ chức phát hành chứng chỉ (CA) để cài đặt chứng chỉ TLS / SSL miễn phí, cho phép HTTPS được mã hóa trên máy chủ web, đơn giản hóa quy trình bằng cách làm việc với một công cụ client, 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, ta sẽ sử dụng Certbot để thiết lập chứng chỉ TLS/SSL với máy chủ web Apache trên CentOS 8. Ngoài ra, ta sẽ tự động hóa quy trình gia hạn chứng chỉ bằng cron job, bạn có thể tìm hiểu thêm tại đây: 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 sẽ cần:

  • Một máy chủ CentOS 8 với người dùng không bắt buộc có sudo root và một firewalld cơ bản có thể được thiết lập theo hướng dẫn thiết lập máy chủ ban đầu CentOS 8 .
  • Apache được cài đặt trên máy chủ có VirtualHost được định cấu hình cho miền của bạn. Bạn có thể tìm hiểu cách thiết lập điều này bằng theo hướng dẫn Cách cài đặt máy chủ web Apache trên CentOS 8 . Xem như bạn đã thiết lập xong VirtualHost cho domain của mình. 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 có quyền cấu hình DNS với tên miền đã đăng ký mà bạn muốn sử dụng chứng chỉ. Nếu bạn chưa có tên miền, bạn có thể mua trên Namecheap , hay một tên miền miễn phí trên Freenom hoặc sử dụng đại lý tên miền nào đó mà bạn muốn.
  • Bản ghi DNS A trỏ domain đến địa chỉ IP của máy chủ của bạn.  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 miền mà nó đang cấp chứng chỉ. Ví dụ: nếu bạn muốn lấy chứng chỉ cho example.com , tên miền đó phải phân giải tới máy chủ của bạn để quá trình xác thực hoạt động. Thiết lập của chúng tôi sẽ sử dụng example.comwww.example.com làm tên miền, 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 điều kiện này, hãy chuyển sang cài đặt công cụ Certbot.

Bước 1 - Cài đặt Certbot Let's Encrypt Client

Để sử dụng Let's Encrypt để lấy chứng chỉ SSL, trước tiên bạn cần cài đặt Certbot và mod_ssl , một mô-đun 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 của Centos. Bạn sẽ cần kích hoạt kho EPEL để cài đặt Certbot.

Để thêm kho lưu trữ (repository) CentOS 8 EPEL, hãy chạy lệnh sau:

  • sudo dnf install epel-release

Bây giờ bạn có quyền truy cập vào kho lưu trữ, 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, ta đã sẵn sàng chạy Certbot và cài chứng chỉ số.

Bước 2 - Lấy chứng chỉ

Certbot đã được cài đặt, bạn có thể sử dụng nó để yêu cầu một chứng chỉ SSL cho miền của mình.

Việc sử dụng ứng 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. Nó tự động lấy và cài đặt chứng chỉ SSL mới hợp lệ cho các domain bạn cung cấp dưới dạng tham số đầu vào trên dòng lệnh.

Để thực hiện cài đặt tương tác và lấy chứng chỉ chỉ bao gồm một tên miền, hãy chạy lệnh certbot với:

  • sudo certbot --apache -d example.com

Lệnh trên chạy certbot với plugin --apache và chỉ định miền để định cấu hình chứng chỉ với cờ -d.

Nếu bạn muốn cài đặt một chứng chỉ hợp lệ cho nhiều tên miền hoặc tên miền phụ, bạn có thể chuyển chúng dưới dạng tham số bổ sung cho lệnh, gắn tên miền hoặc tên miền phụ mới bằng cờ -d. Tên miền đầu tiên trong danh sách các tham số sẽ là miền cơ sở được Let's Encrypt sử dụng để tạo chứng chỉ. Vì vậy, hãy chuyển tên miền cơ sở đầu tiên trong danh sách, sau đó là bất kỳ tên miền phụ hoặc alias (bí danh) 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 miền 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ỳ miền nào được chỉ định:

  • sudo certbot --apache

Chương trình sẽ gợi ý bạn từng bước để tùy chỉnh các tùy chọn chứng chỉ. Nó sẽ yêu cầu bạn cung cấp địa chỉ email để khôi phục khóa bị mất, nhắc bạn đồng ý với các điều khoản dịch vụ. Nếu bạn không chỉ định miền của mình trên dòng lệnh, bạn cũng sẽ được nhắc. Nếu các tệp VirtualHost của bạn không chỉ định domain mà chúng cấp với khai báo ServerName, bạn sẽ được yêu cầu chọn tệp VirtualHost.

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 tệp chứng chỉ đã tạo sẽ có sẵn trong một thư mục con được đặt tên theo miền cơ sở của bạn trong thư mục /etc/letsencrypt/live.

Bây giờ các chứng chỉ của bạn đã được cài đặt, bạn có thể kiểm tra trạng thái chứng chỉ SSL của mình để đảm bảo rằng mọi thứ đang hoạt động.

Bước 3 - Kiểm tra chứng chỉ và cấu hình SSL

Tại thời điểm này, bạn có thể đảm bảo rằng Certbot đã tạo đúng chứng chỉ SSL bằng cách sử dụng Kiểm tra máy chủ SSL từ công ty bảo mật Qualys .

Mở liên kết sau trong trình duyệt web, thay thế example.com bằng miền của bạn: 

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

Bạn sẽ đến một trang kiểm tra kết nối SSL với máy chủ của bạn:

Kiểm tra máy chủ SSL

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.

Khi quá trình kiểm tra kết thúc, 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 máy chủ. 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 trình bày chi tiết các cập nhật được thực hiện cho sơ đồ chấm điểm vào tháng 1 năm 2018.

Hãy thử tải lại trang web của bạn 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 cạnh domain trên thanh địa chỉ.

Với chứng chỉ SSL của bạn đã được cài đặt và xác minh, bước tiếp theo là thiết lập tự động gia hạn cho chứng chỉ, để giữ cho chứng chỉ hợp lệ.

Bước 4 - Thiết lập Tự động gia hạn

Chứng chỉ Let's Encrypt có giá trị 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. Việc này có thể tự động hóa thay vì bằng tay.

Đầu tiên, kiểm tra lệnh mà bạn sẽ sử dụng để gia hạn chứng chỉ. Lệnh certbot Let's Encrypt có lệnh renew tự động kiểm tra các chứng chỉ 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 ý rằng nếu bạn đã tạo chứng chỉ gộp với nhiều domain, thì chỉ tên miền cơ sở mới được hiển thị trong đầu ra, nhưng việc gia hạn sẽ có hiệu lực đối với tất cả các miền có trong chứng chỉ này.

Thực tế để đảm bảo các chứng chỉ của bạn sẽ không bị quá  hạn, là tạo một cron sẽ thực hiện định kỳ gia hạn tự động.

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 chứng chỉ, sẽ không quá nửa ngày trước khi Certbot gia hạn chứng chỉ của bạn. Tài liệu đề xuất sử dụng lệnh sau để thêm một cron thích hợp vào tệp /etc/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

Lệnh trên 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 nghị để giảm tải trên các máy chủ của Let's Encrypt khi đồng thời nhiều client truy cập gia hạn chứng chỉ tại các giờ cố định.

Để 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. 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, cho domain của mình và thiết lập gia hạn chứng chỉ tự động.

Nếu bạn có câu hỏi nào về sử dụng Certbot, bạn có thể xem tài liệu Certbot. Chúng tôi cũng khuyên bạn nên thường xuyên kiểm tra blog Let's Encrypt chính thức để biết các cập nhật quan trọng.


Tags:

Các tin trước

Tạo chứng chỉ số tự ký trên Apache Centos 8 (self-signed-ssl-certificate) 2020-09-19
Tối ưu SQL với Index, FullText Search 2020-08-10
Cài đặt Node.js trên Ubuntu 18.04 2020-08-06
Bảo mật Apache với Lets Encrypt 2020-08-06
Thực hành bài LAB Toàn tập Select SQL Query 2020-08-05
Cài đặt XAMPP Trên Hệ điều hành Windows 2020-08-05
Toàn tập SQL - Bài tập Lệnh SELECT Database Toàn tập - tinh gọn nhất 2020-08-03
Cài đặt MySQL trên Ubuntu 20.04 2020-07-30
Cấu hình sudoers file trên Ubuntu và Centos 2020-07-07
Tạo sudo cho user mới trên Ubuntu 20.04 [Quickstart] 2020-06-22