Thứ sáu, 08/11/2019 | 00:00 GMT+7

Cách bảo mật Apache bằng Let's Encrypt trên FreeBSD 12.0

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.

Trong hướng dẫn này, bạn sẽ sử dụng Certbot để cài đặt certificate TLS / SSL từ Let's Encrypt trên server FreeBSD 12.0 chạy Apache làm web server . Ngoài ra, bạn sẽ tự động hóa quy trình gia hạn certificate bằng cron job.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:

  • Một server FreeBSD 12.0 mà bạn có thể cài đặt theo ý muốn bằng cách sử dụng hướng dẫn này về Cách bắt đầu với FreeBSD .

  • Đã cài đặt Apache bằng cách hoàn thành Bước 1 của hướng dẫn ngăn xếp FAMP này.

  • Tường lửa được kích hoạt bằng cách sử dụng bước cấu hình firewall trong hướng dẫn hướng dẫn này.

  • Hai 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. Cài đặt của ta sẽ sử dụng your-domainwww. your-domain dưới dạng domain , cả hai đều sẽ yêu cầu bản ghi DNS hợp lệ. 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 các bản ghi DNS với nền tảng DigitalOcean. Bản 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 your-domain đó phải phân giải tới server của bạn để quá trình xác thực hoạt động.

Sau khi hoàn thành các yêu cầu này, bạn có thể bắt đầu cài đặt Certbot, công cụ cho phép bạn cài đặt certificate Let's Encrypt.

Bước 1 - Cài đặt Công cụ Certbot cho Let's Encrypt

Chứng chỉ Let's Encrypt đảm bảo trình duyệt của user có thể xác minh web server được bảo mật bởi Tổ chức phát hành certificate tin cậy . Giao tiếp với web server được bảo vệ bằng mã hóa sử dụng HTTPS.

Trong bước này, bạn sẽ cài đặt công cụ Certbot cho web server của bạn để yêu cầu server Let's Encrypt nhằm cấp certificate và khóa hợp lệ cho domain của bạn.

Chạy lệnh sau để cài đặt gói Certbot và plugin Apache HTTP của nó:

  • sudo pkg install -y py37-certbot py37-certbot-apache

Đến đây bạn đã cài đặt gói, bạn có thể chuyển sang bật kết nối TLS trong web server .

Bước 2 - Bật kết nối SSL / TLS trong Apache HTTP

Theo mặc định, cài đặt Apache HTTP nào sẽ phân phát nội dung trên cổng 80 (HTTP). Mục nhập Listen 80 trong file cấu hình httpd.conf chính xác nhận điều này. Để cho phép kết nối HTTPS, bạn cần cổng mặc định là 443 . Để thêm cổng 443 và cài đặt kết nối SSL / TLS, bạn sẽ bật module mod_ssl trong Apache HTTP.

Để tìm module này trong file httpd.conf , bạn sẽ sử dụng grep với cờ -n để đánh số các dòng từ file trong đường dẫn được chỉ định. Tại đây, bạn sẽ tìm thấy mod_ssl.so bằng cách chạy lệnh sau:

  • grep -n 'mod_ssl.so' /usr/local/etc/apache24/httpd.conf

Khi kết quả , bạn sẽ nhận được số cho dòng bạn cần:

/usr/local/etc/apache24/httpd.conf
148 #LoadModule ssl_module libexec/apache24/mod_ssl.so 

Để kích hoạt module , bạn sẽ xóa biểu tượng thẻ bắt đầu bằng # ở đầu dòng.

Sử dụng số dòng từ lệnh trước đó, mở file như sau:

  • sudo vi +148 /usr/local/etc/apache24/httpd.conf

Điều này sẽ đưa bạn trực tiếp đến dòng chính xác để chỉnh sửa.

Chỉnh sửa dòng để trông giống như sau bằng cách nhấn x :

/usr/local/etc/apache24/httpd.conf
#LoadModule session_dbd_module libexec/apache24/mod_session_dbd.so #LoadModule slotmem_shm_module libexec/apache24/mod_slotmem_shm.so #LoadModule slotmem_plain_module libexec/apache24/mod_slotmem_plain.so LoadModule ssl_module libexec/apache24/mod_ssl.so #LoadModule dialup_module libexec/apache24/mod_dialup.so #LoadModule http2_module libexec/apache24/mod_http2.so #LoadModule proxy_http2_module libexec/apache24/mod_proxy_http2.so 

Khi bạn đã xóa dấu # , hãy nhấn :wq rồi nhấn ENTER để đóng file .

Bạn đã bật khả năng SSL / TLS trong Apache HTTP. Trong bước tiếp theo, bạn sẽ cấu hình các server ảo trong Apache HTTP.

Bước 3 - Bật và cấu hình server ảo

Server ảo là một phương pháp mà một số trang web có thể tồn tại đồng thời và độc lập trong cùng một server bằng cách sử dụng cùng một cài đặt Apache HTTP. Certbot yêu cầu cài đặt này để đặt các luật cụ thể trong file cấu hình ( server ảo) để certificate Let's Encrypt hoạt động.

Để bắt đầu, bạn sẽ kích hoạt các server ảo trong Apache HTTP. Chạy lệnh sau để tìm chỉ thị trong file :

  • grep -n 'vhosts' /usr/local/etc/apache24/httpd.conf

Bạn sẽ thấy số dòng trong kết quả của bạn :

Output
508 #Include etc/apache24/extra/httpd-vhosts.conf

Bây giờ hãy sử dụng lệnh sau để chỉnh sửa file và xóa # khỏi đầu dòng đó:

  • sudo vi +508 /usr/local/etc/apache24/httpd.conf

Như trước đây, nhấn x để xóa # khỏi đầu dòng để trông giống như sau:

/usr/local/etc/apache24/httpd.conf
... # User home directories #Include etc/apache24/extra/httpd-userdir.conf  # Real-time info on requests and configuration #Include etc/apache24/extra/httpd-info.conf  # Virtual hosts Include etc/apache24/extra/httpd-vhosts.conf  # Local access to the Apache HTTP Server Manual #Include etc/apache24/extra/httpd-manual.conf  # Distributed authoring and versioning (WebDAV) #Include etc/apache24/extra/httpd-dav.conf ... 

Sau đó nhấn :wqENTER để lưu và thoát file .

Đến đây bạn đã bật server ảo trong Apache HTTP, bạn sẽ sửa đổi file cấu hình server ảo mặc định để thay thế các domain mẫu bằng domain của bạn.

Đến đây bạn sẽ thêm một khối server ảo vào file httpd-vhosts.conf . Bạn sẽ chỉnh sửa file và xóa hai khối VirtualHost hiện có, sau khối comment ở dòng 23, bằng lệnh sau:

  • sudo vi +23 /usr/local/etc/apache24/extra/httpd-vhosts.conf

Sau khi mở file , hãy xóa hai đoạn cấu hình VirtualHost hiện có, sau đó thêm khối sau với cấu hình cụ thể này:

/usr/local/etc/apache24/extra/httpd-vhosts.conf
<VirtualHost *:80>     ServerAdmin your_email@your_domain.com     DocumentRoot "/usr/local/www/apache24/data/your_domain.com"     ServerName your_domain.com     ServerAlias www.your_domain.com     ErrorLog "/var/log/your_domain.com-error_log"     CustomLog "/var/log/your_domain.com-access_log" common </VirtualHost> 

Trong khối này, bạn đang cấu hình như sau:

  • ServerAdmin : Đây là nơi đặt email từ người phụ trách trang web cụ thể đó.
  • DocumentRoot : Chỉ thị này xác định vị trí các file cho trang web cụ thể sẽ được đặt và được đọc từ đâu.
  • ServerName : Đây là domain của trang web.
  • ServerAlias : Tương tự như ServerName nhưng đặt www. trước domain .
  • ErrorLog : Đây là nơi khai báo đường dẫn log lỗi. Tất cả các thông báo lỗi sẽ được ghi trong file được chỉ định trong chỉ thị này.
  • CustomLog : Tương tự như ErrorLog nhưng lần này file là file thu thập tất cả các bản ghi truy cập.

Cuối cùng, bạn sẽ tạo folder nơi trang web sẽ được đặt. Đường dẫn này phải trùng với đường dẫn bạn đã khai báo trong chỉ thị DocumentRoot trong file httpd-vhosts.conf .

  • sudo mkdir /usr/local/www/apache24/data/your_domain.com

Bây giờ thay đổi quyền của folder để tiến trình Apache HTTP (chạy với quyền user www ) có thể hoạt động với nó:

  • sudo chown -R www:www /usr/local/www/apache24/data/your_domain.com

Bạn đã sử dụng chown để thay đổi quyền sở hữu với cờ -R để thực hiện hành động đệ quy. User và group được đặt bởi www:www .

Bạn đã bật server ảo trong Apache HTTP. Đến đây bạn sẽ kích hoạt module viết lại.

Bước 4 - Bật module ghi lại

Việc kích hoạt module ghi lại trong Apache HTTP là cần thiết để làm cho các URL thay đổi, chẳng hạn như khi chuyển hướng từ HTTP sang HTTPS.

Sử dụng lệnh sau để tìm module viết lại:

  • grep -n 'rewrite' /usr/local/etc/apache24/httpd.conf

Bạn sẽ thấy kết quả tương tự như:

Output
180 #LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Để kích hoạt module , bây giờ bạn sẽ xóa # khỏi đầu dòng:

  • sudo vi +180 /usr/local/etc/apache24/httpd.conf

Chỉnh sửa file của bạn để trông giống như sau bằng cách nhấn x để xóa # ở đầu dòng:

/usr/local/etc/apache24/httpd.conf
#LoadModule actions_module libexec/apache24/mod_actions.so #LoadModule speling_module libexec/apache24/mod_speling.so #LoadModule userdir_module libexec/apache24/mod_userdir.so LoadModule alias_module libexec/apache24/mod_alias.so LoadModule rewrite_module libexec/apache24/mod_rewrite.so LoadModule php7_module        libexec/apache24/libphp7.so  # Third party modules IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf  <IfModule unixd_module> 

Lưu và thoát khỏi file này.

Đến đây bạn đã hoàn thành việc cài đặt các cấu hình cần thiết trong Apache.

Bước 5 - Lấy certificate Let's Encrypt

Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL thông qua các plugin khác nhau. Plugin apache sẽ xử lý việc cấu hình lại Apache HTTP. Để thực hiện cài đặt tương tác và lấy certificate chỉ bao gồm một domain , hãy chạy lệnh certbot sau:

  • sudo certbot --apache -d your-domain -d www.your-domain

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ở trước, sau đó là bất kỳ domain phụ hoặc alias bổ sung nào.

Nếu đây là lần đầu tiên bạn chạy certbot trên server này, ứng dụng client sẽ nhắc bạn nhập địa chỉ email và đồng ý với các điều khoản dịch vụ của Let's Encrypt. 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ử thách 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:

Output
. . . Please 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): 2

Bạn cũng sẽ có thể chọn giữa việc bật cả truy cập HTTPHTTPS hoặc buộc tất cả các yêu cầu chuyển hướng sang HTTPS . Để bảo mật tốt hơn, bạn nên chọn tùy chọn 2: Redirect nếu bạn không có bất kỳ nhu cầu đặc biệt nào để cho phép các kết nối không được mã hóa. Chọn lựa chọn của bạn rồi nhấn ENTER .

Thao tác này sẽ cập nhật cấu hình và reload Apache HTTP để nhận các 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:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /usr/local/etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /usr/local/etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on yyyy-mm-dd. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/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 certificate của bạn hiện đã được download , cài đặt và cấu hình . Hãy thử reload trang web bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Nó sẽ thể hiện 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.

Certbot đã thực hiện một số thay đổi cấu hình quan trọng. Khi cài đặt các certificate trong web server của bạn, nó phải đặt chúng vào các đường dẫn cụ thể. Nếu bây giờ bạn đọc nội dung trong file httpd-vhosts.conf bạn sẽ thấy một số thay đổi do chương trình Certbot thực hiện.

Ví dụ trong phần <VirtualHost *:80> , các luật chuyển hướng (nếu được chọn) được đặt ở cuối phần.

/usr/local/etc/apache24/extra/httpd-vhosts.conf
RewriteEngine on RewriteCond %{SERVER_NAME} =www.your_domain.com [OR] RewriteCond %{SERVER_NAME} =your_domain.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] 

Certbot cũng đã tạo một file có tên là httpd-vhosts-le-ssl.conf nơi cấu hình cho các certificate trên Apache đã được đặt:

/usr/local/etc/apache24/extra/httpd-vhosts-le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443>     ServerAdmin your_email@your_domain.com     DocumentRoot "/usr/local/www/apache24/data/your_domain.com"     ServerName your_domain.com     ServerAlias www.your_domain.com     ErrorLog "/var/log/your_domain.com-error_log"     CustomLog "/var/log/your_domain.com-access_log" common  Include /usr/local/etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /usr/local/etc/letsencrypt/live/your_domain.com/fullchain.pem SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/your_domain.com/privkey.pem </VirtualHost> </IfModule> 

Lưu ý: Nếu bạn muốn áp dụng các thay đổi đối với việc sử dụng bộ mật mã trên các trang web có certificate Let's Encrypt, bạn có thể thực hiện việc này trong file /usr/local/etc/letsencrypt/options-ssl-apache.conf .

Sau khi nhận được certificate Let's Encrypt, bây giờ bạn có thể chuyển sang cài đặt gia hạn tự động.

Bước 6 - Cấu hình gia hạn certificate tự động

Chứng chỉ Let's Encrypt có hiệu lực trong 90 ngày, nhưng bạn nên gia hạn certificate sau mỗi 60 ngày để hạn chế sai sót. Do đó, cách tốt nhất là tự động hóa quy trình này để kiểm tra và gia hạn certificate theo định kỳ.

Đầ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 gia hạn:

  • sudo certbot renew --dry-run

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. Vì lần gia hạn đầu tiên sẽ kiểm tra ngày hết hạn và chỉ thực hiện việc gia hạn nếu certificate còn chưa đầy 30 ngày nữa là hết hạn, nên có thể an toàn để tạo một công việc cron chạy hàng tuần hoặc thậm chí hàng ngày.

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.

Chỉnh sửa crontab để tạo một công việc mới sẽ chạy gia hạn hai lần mỗi ngày. Để chỉnh sửa crontab cho user root , hãy chạy:

  • sudo crontab -e

Đặt cấu hình sau vào file để, hai lần một ngày, hệ thống sẽ tìm kiếm các certificate có thể gia hạn và sẽ gia hạn chúng nếu chúng cần:

SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin # Order of crontab fields # minute    hour    mday    month   wday    command   0         0,12    *       *       *       /usr/local/bin/certbot renew 

Trong hai dòng đầu tiên, bạn đang khai báo các biến môi trường, do đó, nơi các đường dẫn thực thi được tìm thấy và shell chúng đang thực thi. Sau đó, bạn chỉ ra các khung thời gian mà bạn quan tâm và lệnh thực thi.

Với bộ hướng dẫn ngắn gọn này, bạn đã cấu hình tự động gia hạn certificate .

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ấu hình Apache để sử dụng các certificate này và cài đặt gia hạn certificate tự động. Để biết thêm thông tin, hãy xem tài liệu của Certbot.


Tags:

Các tin liên quan

Cách cài đặt Apache Tomcat 9 trên Debian 10
2019-10-24
Cách cấu hình báo cáo MTA-STS và TLS cho miền của bạn bằng Apache trên Ubuntu 18.04
2019-09-06
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 10
2019-08-22
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 10
2019-07-22
Cách cài đặt web server Apache trên Debian 10
2019-07-19
Cách cấu hình Apache HTTP với Sự kiện MPM và PHP-FPM trên FreeBSD 12.0
2019-07-12
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 12.0
2019-06-28
Cách cài đặt web server Apache trên CentOS 7
2019-05-29
Cách bảo mật Apache bằng Let's Encrypt trên CentOS 7
2019-05-23
Cách cài đặt Apache Kafka trên Ubuntu 18.04
2019-05-10