Cách định cấu hình bảo mật TLS trong Apache

Tác giả sysadmin, T.M.Hai 31, 2022, 03:43:05 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Cách định cấu hình bảo mật TLS trong Apache


Theo mặc định, Apache sẽ phân phát nội dung web qua dây rõ ràng thông qua HTTP không an toàn. Chúng tôi có thể tăng tính bảo mật giữa máy khách và máy chủ web bằng cách sử dụng HTTPS. Điều này sẽ mã hóa dữ liệu được truyền giữa hai bên và được thực hiện bằng cách định cấu hình TLS.

Tại đây, chúng tôi sẽ thêm hỗ trợ HTTPS cho miền thử nghiệm   Đăng nhập để xem liên kết mà chúng tôi đã định cấu hình trước đó trong hướng dẫn cấu hình máy chủ ảo của mình.

Vì SSLv2 và SSLv3 hiện được coi là không an toàn nên chúng tôi sẽ không định cấu hình SSL tại đây và chỉ sử dụng TLS.

1. Cấu hình tường lửa

Để cho phép lưu lượng HTTPS thông qua tường lửa, hãy chạy các lệnh bên dưới.

Mã nguồn [Chọn]
[root@centos ~]# firewall-cmd --permanent --add-service=https
success
[root@centos ~]# firewall-cmd --reload
success

2. Tạo cặp khóa

HTTPS hoạt động bằng cách sử dụng chứng chỉ X.509 mà trước tiên chúng tôi phải tạo. Trong ví dụ này, chúng tôi sẽ tạo chứng chỉ tự ký, đó là chính máy chủ đang tạo khóa đang tạo khóa chung. Thông thường đối với trang web sản xuất có thể truy cập được qua Internet, bạn sẽ cung cấp yêu cầu ký chứng chỉ (CSR) cho cơ quan cấp chứng chỉ đáng tin cậy (CA) chẳng hạn như GeoTrust, người sẽ ký chứng chỉ, một quy trình thường tốn tiền và không bắt buộc đối với thử nghiệm.

Để tạo chứng chỉ của chúng tôi, chúng tôi sẽ sử dụng lệnh genkey là một phần của gói tiện ích tiền điện tử. Mặc dù có các phương pháp tạo chứng chỉ khác, chẳng hạn như với OpenSSL, nhưng genkey sẽ hướng dẫn bạn qua giao diện người dùng văn bản (TUI) cho toàn bộ quá trình, do đó bạn không cần phải nhớ nhiều cờ lệnh tầm thường khác nhau. Chỉ cần nhập lệnh genkey theo sau là tên miền của bạn (tên chung) mà chứng chỉ sẽ bao gồm. Trong trường hợp này, chúng tôi đang tạo chứng chỉ cho   Đăng nhập để xem liên kết vì chúng tôi muốn truy cập   Đăng nhập để xem liên kết một cách an toàn qua HTTPS.

Mã nguồn [Chọn]
[root@centos ~]# genkey www.example.com
Tại thời điểm này, giao diện người dùng văn bản sẽ xuất hiện hướng dẫn bạn thực hiện quy trình. Màn hình đầu tiên cho biết nơi lưu trữ chứng chỉ và tệp khóa sau khi cặp khóa được tạo, hãy chọn tiếp theo để tiếp tục.


Bây giờ bạn sẽ được nhắc chọn kích thước của khóa, khóa càng nhỏ thì thời gian phản hồi càng nhanh tuy nhiên nó sẽ kém an toàn hơn. Kích thước khóa là 2048 bit được khuyến nghị vì điều này mang lại sự cân bằng hợp lý giữa tốc độ và bảo mật. Chọn tiếp theo để tiếp tục sau khi đánh dấu kích thước phím sẽ sử dụng.


Đợi trong khi các bit ngẫu nhiên được tạo.


Dữ liệu ngẫu nhiên sẽ được sử dụng để tạo khóa, bạn có thể nhập khóa ngẫu nhiên và di chuyển chuột trong bảng điều khiển để tăng tốc quá trình này.


Bạn có thể tùy ý chọn để tạo CSR nếu bạn sẽ ký chứng chỉ với CA, trong trường hợp này, chúng tôi đang tạo chứng chỉ tự ký cục bộ nên chúng tôi sẽ chọn không ở đây.


Bạn có thể tùy chọn đặt cụm mật khẩu trên khóa riêng tư sẽ mã hóa và giữ an toàn cho khóa khỏi bị đánh cắp, điều này được khuyến nghị trong môi trường sản xuất để khóa không thể dễ dàng bị đánh cắp. Vì mục đích thử nghiệm của chúng tôi, chúng tôi sẽ không mã hóa khóa.


Nhập chi tiết cho chứng chỉ, chúng sẽ hiển thị cho người dùng kết nối với trang web. Điều quan trọng là tên chung (FQDN) phải được đặt thành miền mà chứng chỉ sẽ bao gồm, trong trường hợp này, chúng tôi đang sử dụng   Đăng nhập để xem liên kết và tên này đã được điền vào khi chúng tôi chỉ định tên chung này bằng lệnh genkey ban đầu.


Sau khi quá trình này hoàn tất, bạn sẽ thấy lệnh thực tế được chạy dựa trên các lựa chọn của bạn trong genkey, nó cũng sẽ liệt kê nơi có thể tìm thấy chứng chỉ và khóa của bạn.

Mã nguồn [Chọn]
output will be written to /etc/pki/tls/certs/www.example.com.crt
output key written to /etc/pki/tls/private/www.example.com.key

Theo mặc định, các chứng chỉ sẽ được lưu trữ trong thư mục /etc/pki/tls/certs/ và các khóa trong thư mục /etc/pki/tls/private/, bạn có thể tùy chọn di chuyển các tệp này sang nơi khác tuy nhiên chúng tôi sẽ để chúng ở vị trí hiện tại.

Mặc dù genkey khá thân thiện với người dùng và dễ nhớ, nhưng khóa sẽ mất một chút thời gian để tạo, điều này có thể không lý tưởng nếu bạn đang trong tình huống kiểm tra, thay vì genkey, bạn có thể tạo chứng chỉ và khóa nhanh hơn nhiều bằng OpenSSL, lệnh dành cho điều này được hiển thị dưới đây.

Mã nguồn [Chọn]
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout www.exmaple.com.key -out www.example.com.crt
3. Cấu hình Apache

Bây giờ chứng chỉ và khóa đã sẵn sàng, đã đến lúc định cấu hình Apache. Để Apache có thể làm việc với TLS chúng ta phải cài đặt gói mod_ssl như hình bên dưới.

Mã nguồn [Chọn]
yum install mod_ssl -y
Sau khi cài đặt, tệp này sẽ tạo tệp cấu hình mặc định trong /etc/http/conf.d/ssl.conf, tệp này chỉ định rằng Apache sẽ lắng nghe trên cổng TCP 443 đối với các yêu cầu HTTPS cũng như các giá trị mặc định khác như bộ giao thức và mật mã để sử dụng.

Tiếp theo, chúng tôi sẽ sửa đổi tệp cấu hình /etc/httpd/conf.d/example1.conf hiện có được tạo trong hướng dẫn cấu hình máy chủ ảo của chúng tôi, hãy đảm bảo kiểm tra xem bạn có cần hiểu cách thức hoạt động của máy chủ ảo hay không.

Dưới đây là nội dung của /etc/httpd/conf.d/example1.conf, lưu ý rằng cấu hình VirtualHost *:80 đã có sẵn.

Mã nguồn [Chọn]
<VirtualHost *:80>
    DocumentRoot "/var/www/html/example1"
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin [email protected]
    ErrorLog "/var/log/httpd/error_log"
    CustomLog "/var/log/httpd/access_log" combined
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/var/www/html/example1"
    ServerName www.example.com
    ServerAlias example.com
    ServerAdmin [email protected]
    ErrorLog "/var/log/httpd/error_log"
    CustomLog "/var/log/httpd/access_log" combined

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/www.example.com.crt
    SSLCertificateKeyFile /etc/pki/tls/private/www.example.com.key
</VirtualHost>

Về cơ bản, cấu hình máy chủ ảo cho cổng 80 đã được sao chép và dán và cổng đã được sửa đổi thành 443 vì đây là cổng mà các yêu cầu HTTPS sử dụng theo mặc định. Để hiểu đầy đủ về tất cả những dòng này trong máy chủ ảo thực sự làm gì, hãy tham khảo hướng dẫn cấu hình máy chủ ảo của chúng tôi.

Tiếp theo, chúng tôi sẽ đề cập đến các dòng mới xuất hiện trong *:443 máy chủ ảo.

  • SSLEngine on – Điều này chỉ đơn giản nói rằng Công cụ SSL đang bật và máy chủ ảo này sẽ được sử dụng để phục vụ các kết nối an toàn.
  • SSLCertificateFile /etc/pki/tls/certs/www.example.com.crt – Phần này chỉ định vị trí của chứng chỉ sẽ được sử dụng, phần này được tạo bằng genkey ở trên.
  • SSLCertificateKeyFile /etc/pki/tls/private/www.example.com.key – Điều này chỉ định vị trí của khóa riêng sẽ được sử dụng, điều này đã được tạo bằng genkey ở trên.

Đây là tất cả những gì thực sự cần thiết, tất cả cấu hình mặc định khác trong tệp /etc/httpd/conf.d/ssl.conf sẽ được sử dụng cho mọi thứ không được chỉ định trong máy chủ ảo.

Nếu chúng tôi đã ký chứng chỉ của mình với CA bên thứ ba, chúng tôi cũng sẽ sử dụng 'SSLCertificateChainFile' và chỉ định tệp chuỗi do CA cung cấp, tuy nhiên, vì chúng tôi đang sử dụng chứng chỉ tự ký nên điều này sẽ không bắt buộc.

4. Kiểm tra HTTPS

Trước khi thực hiện bất kỳ thử nghiệm nào, chúng tôi phải áp dụng bất kỳ thay đổi nào đã được thực hiện trong các tệp cấu hình Apache bằng cách khởi động lại hoặc tải lại httpd.

Mã nguồn [Chọn]
systemctl reload httpd
Bây giờ các thay đổi cấu hình của chúng tôi đang hoạt động, chúng tôi sẽ thực hiện kiểm tra cả HTTP và HTTPS bằng lệnh curl. Chúng tôi sẽ sử dụng cờ -k khi kiểm tra HTTPS vì điều này cho phép curl thực hiện các kết nối và chuyển giao SSL/TLS "không an toàn", lý do điều này được coi là không an toàn là do chúng tôi đã sử dụng chứng chỉ tự ký.

Mã nguồn [Chọn]
[root@centos ~]# curl http://www.example.com
example.com website
[root@centos ~]# curl -k https://www.example.com
example.com website

Vì cùng một đầu ra đang được cung cấp chính xác từ trang /var/www/html/example1/index.html của chúng tôi, điều này xác nhận rằng máy chủ ảo đã sửa đổi của chúng tôi đang cung cấp thành công trang web thông qua kết nối HTTPS an toàn.

Chúng ta có thể tùy chọn xem thông tin chứng chỉ bằng lệnh openssl được hiển thị bên dưới, lệnh này sẽ kết nối với Apache qua cổng 443.

Mã nguồn [Chọn]
openssl s_client -showcerts -connect www.example.com:443
5. Thêm thông tin

Nếu bạn gặp khó khăn hoặc gặp khó khăn trong việc ghi nhớ bất kỳ điều nào trong số này, hãy nhớ gói httpd-manual có thể được cài đặt và xem tại   Đăng nhập để xem liên kết.

Từ trang chính, chỉ cần chọn Mã hóa SSL/TLS để được trợ giúp về chủ đề này.

Như đã trình bày, chúng tôi có thể tạo chứng chỉ và khóa bằng genkey, cài đặt mod_ssl qua yum và định cấu hình máy chủ ảo để nghe trên cổng 443, đồng thời chỉ định chứng chỉ và khóa của chúng tôi sẽ sử dụng. Sau khi hoàn thành tất cả các thay đổi, dịch vụ httpd đã được tải lại để áp dụng các thay đổi cấu hình và sau đó chúng tôi xác nhận rằng Apache đang cung cấp chính xác nội dung được mã hóa qua HTTPS.