Làm cách nào để tắt TLS 1.1 & 1.2 trong Apache?


13

Tôi có máy chủ Ubuntu 12.04.2 LTS chạy Apache 2.2.22 với mod_ssl và OpenSSL v1.0.1.

Trong cấu hình vhosts của tôi (mọi thứ khác trong đó hoạt động như tôi mong đợi), tôi có SSLProtocoldòng với -all +SSLv3.

Với cấu hình đó, TLS 1.1 & 1.2 được kích hoạt và hoạt động chính xác - điều này ngược với tôi, vì tôi hy vọng rằng chỉ SSLv3 mới được kích hoạt với cấu hình đó.

Tôi có thể bật / tắt TLSv1 tốt -/+TSLv1, và nó hoạt động như mong đợi. Nhưng +/-TLSv1.1+/-TLSv1.2không phải là tùy chọn cấu hình hợp lệ - vì vậy tôi không thể vô hiệu hóa chúng theo cách đó.

Về lý do tại sao tôi muốn làm điều này - tôi đang xử lý một ứng dụng của bên thứ ba (mà tôi không có quyền kiểm soát) có một số hành vi lỗi với các máy chủ hỗ trợ TLS và tôi cần phải vô hiệu hóa hoàn toàn để tiến lên.


chỉ vì tò mò - tôi có thể hỏi tại sao bạn muốn tắt TSL ngay từ đầu không? từ những gì tôi thu thập được, nó được cho là an toàn hơn SSLv1 / 2/3, vì vậy tôi chỉ có thể tưởng tượng ra lý do muốn chỉ cho phép v1.2 chứ không phải v1.1 (đó là điều đã đưa tôi đến đây), nhưng không phải để vô hiệu hóa nó ủng hộ SSL, ngoại trừ một số vấn đề tương thích với phần mềm cũ hơn?
mã hóa

@codeling Làm việc với phần mềm cũ, bên thứ ba, có lỗi với TLS.
Kyle Lowry

Câu trả lời:


23

Bị hấp dẫn bởi lỗi này (và vâng, tôi đã có thể sao chép nó) Tôi đã xem mã nguồn cho phiên bản ổn định mới nhất mod_sslvà tìm thấy lời giải thích. Hãy chịu đựng tôi, điều này sẽ khiến tài tử chồng chất quá mức:

Khi SSLProtocolđã được phân tích cú pháp, kết quả là chartrông giống như thế này:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

Khi bắt đầu một bối cảnh máy chủ mới, TẤT CẢ các giao thức có sẵn sẽ được bật và các giao thức trên charđược kiểm tra bằng cách sử dụng một số thao tác VÀ bit khéo léo để xác định giao thức nào sẽ bị vô hiệu hóa . Trong trường hợp này, trong đó SSLv3 là giao thức duy nhất được kích hoạt rõ ràng, 3 giao thức khác sẽ bị vô hiệu hóa.

OpenSSL hỗ trợ cài đặt giao thức cho TLSv1.1, nhưng vì SSLProtocolkhông tính đến các tùy chọn này nên nó không bao giờ bị vô hiệu hóa. OpenSSL v1.0.1 có một số vấn đề đã biết với TLSv1.2 nhưng nếu nó được hỗ trợ, tôi cho rằng điều tương tự cũng xảy ra với TLSv1.1; nó không được nhận dạng / xử lý bởi mod_ssl và do đó không bao giờ bị vô hiệu hóa.

Tài liệu tham khảo mã nguồn cho mod_ssl:

SSLProtocolđược phân tích cú pháp tại dòng 925 trong pkg.sslmod/ssl_engine_config.c
Các tùy chọn được sử dụng trong chức năng trên được xác định tại dòng 444 trong pkg.sslmod/mod_ssl.h
Tất cả các giao thức được bật ở dòng 586, pkg.sslmod/ssl_engine_init.csau đó các giao thức cụ thể bị vô hiệu hóa trên các dòng tiếp theo

Làm thế nào để vô hiệu hóa nó sau đó?

Bạn có một vài lựa chọn:

  1. Vô hiệu hóa nó trong tệp cấu hình OpenSSL với:
    Protocols All,-TLSv1.1,-TLSv1.2
  2. Viết lại mod_ssl;-)

Trông giống như một câu trả lời hoàn hảo, chỉ cần xác minh: tập tin cấu hình OpenSSL nào / cái gì / ở đâu?
Kyle Lowry

openssl.cnf- vị trí phụ thuộc vào cài đặt. Trên Debian nén tôi đã tìm thấy nó tại /etc/ssl/openssl.cnf, trong OS X tại /System/Library/OpenSSL/openssl.cnfvà trên Windows 7 tại %systemdrive%\openssl\openssl.cnf.
Mathias R. Jessen

1
Tôi đang xem tập tin cấu hình bây giờ; cú pháp trông hơi khác so với những gì tôi mong đợi dựa trên câu trả lời của bạn và dường như tôi không thể tìm thấy bất cứ điều gì trực tuyến nói rõ rằng bạn có thể kiểm soát các giao thức được bật / tắt từ tệp cấu hình đó. Bạn có bất kỳ tài liệu tham khảo cho điều đó? Cảm ơn.
Kyle Lowry

Một tùy chọn khác - sử dụng: SSLProtocoltheo cách tương tự ở trên ( SSLProtocol All -TLSv1.1 -TLSv1.2(không cần dấu phẩy)) nhưng theo cấu hình Apache toàn cầu hoặc cụ thể để 'ghi đè' bất kỳ cấu hình toàn cầu SSL nào được đề cập ở trên. (Nếu bạn không muốn thay đổi tất cả các mật mã SSL cơ bản -> Vì mật mã bạn cần được coi là yếu.)
bshea

2

Vấn đề cũng được giải quyết tại các bình luận trên trang mod_ssl Apache: http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#comment_1136

Nếu Ubuntu 12.04 có Apache 2.2.23, sự cố sẽ không xảy ra. Theo các ý kiến, có thể kích hoạt TLSv1.1 và TLSv1.2, nhưng TLSv1.0 sau đó cũng được bật:

SSLProtocol All -SSLv2 -SSLv3

1

Trước hết, bạn phải xác định đâu là vhost mặc định cho cổng 443 trong máy chủ của bạn (SSL vhost đầu tiên được tải bởi Apache) và chỉnh sửa tệp cấu hình của nó. Hầu hết người dùng có tệp ssl.conf trong máy chủ của họ, với một vhost cho cổng 443 được cấu hình ở đó. Vì tên của tệp này bắt đầu bằng "s", nó sẽ tải trước khi vhost được cấu hình trong vhosts.conf (bắt đầu bằng "v"). Vì vậy, hãy kiểm tra xem đây có phải là trường hợp của bạn không (câu trả lời là "có" cho hầu hết mọi người) và thay đổi các giao thức trong tệp đó . Thế là đủ rồi!

Một vấn đề tương tự đã được đăng ở đây: Làm cách nào để tắt TLS 1.1 & 1.2 trong Apache? . Theo HBruijn:

Trừ khi bạn có IP Virtualhost, trong thực tế, các cài đặt từ lần xuất hiện đầu tiên của lệnh SSLProtatio được sử dụng cho toàn bộ máy chủ và / hoặc tất cả các Virtualhost dựa trên tên hỗ trợ TLS

Và một điều nữa ở đây: Có thể đặt SSLProtocol trong Apache cho một Virtualhost (poodle) không? . Theo vallismortis:

Bạn chỉ có thể đặt SSLProtocol cho Virtualhost đầu tiên trong tệp cấu hình. Tất cả các mục Virtualhost tiếp theo sẽ kế thừa cài đặt đó từ mục nhập đầu tiên và âm thầm bỏ qua cài đặt riêng của chúng do lỗi OpenSSL.

Nhân tiện: vhost mặc định trong một máy chủ, đối với một cổng nhất định, là cổng trả lời các yêu cầu cho cổng đó, đến máy chủ mà không nhận dạng tên máy chủ (hoặc có tên máy chủ sai). Ví dụ: một IP được nhập vào thanh địa chỉ trình duyệt của bạn hoặc chuyển hướng sai do gây ra bởi một bảng DNS không chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.