Bug 11559 - apache2 не всегда отдаёт заголовки при использовании mod_ssl
Summary: apache2 не всегда отдаёт заголовки при использовании mod_ssl
Status: CLOSED WONTFIX
Alias: None
Product: Sisyphus
Classification: Development
Component: apache2 (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Anton Farygin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-04-18 15:29 MSD by Anton Farygin
Modified: 2017-10-16 14:42 MSK (History)
2 users (show)

See Also:


Attachments
apache2-2.2.4-alt-headers.ErrorDocument-0.1.patch (6.87 KB, patch)
2007-04-19 19:04 MSD, solo
no flags Details | Diff
apache2-2.2.4-alt-headers.ErrorDocument-0.2.patch (23.65 KB, patch)
2007-04-26 17:56 MSD, solo
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Anton Farygin 2007-04-18 15:29:19 MSD
Метод воспроизводства:
1) ставим и приводим в рабочее состояние alterator-fbi
2) редактируем httpd2.alterator.conf, добавляем строки:
ErrorDocument 400 "https://localhost:8080/fbi-bin/"
ErrorDocument 404 "https://localhost:8080/fbi-bin/"

Смотрим:
curl -kv https://localhost:8080/dsalkfjslkjf  - поле Location в заголовках,
отданных сервером - появляется. Затем идёт HTML о необходимости сделать редирект.

смотрим:
curl -kv http://localhost:8080/dsalkfjslkjf - заголовки от сервера не приходят
вообще, открывается сразу HTML о необходимости сделать редирект

После исправления этой ошибки можно будет сделать редирект с
http://localhost:8080/ на https://localhost:8080/ при обращении к alterator-fbi
Comment 1 solo 2007-04-19 19:04:38 MSD
Created attachment 1913 [details]
apache2-2.2.4-alt-headers.ErrorDocument-0.1.patch

Патч для вывода отладки ap_send_error_response.
Comment 2 solo 2007-04-19 19:19:26 MSD
После прикладывания apache2-2.2.4-alt-headers.ErrorDocument-0.1.patch
(http://git.altlinux.org/people/solo/packages/?p=apache2.git;a=commit;h=6d9794b7d7df70303c40a03a2c654e32591364d4)
видно, что при звпросах вида "curl -kv http://localhost:8080/dsalkfjslkjf" при
вызове функции ap_send_error_response условие (!r->assbackwards) не выполняется
(соответственно заголовки не генерируются):

[Thu Apr 19 19:10:38 2007] [info] [client 127.0.0.1] SSL handshake failed: HTTP
spoken on HTTPS port; trying to send HTML error page
[Thu Apr 19 19:10:38 2007] [info] SSL Library Error: 336027804
error:1407609C:SSL routines:SSL23_GET_CLIENT_HELLO:http request speaking HTTP to
HTTPS port!?
[Thu Apr 19 19:10:38 2007] [debug] http_protocol.c(1107):
ap_send_error_response: start
[Thu Apr 19 19:10:38 2007] [debug] http_protocol.c(1323):
ap_send_error_response: END.

При запросах вида "curl -kv https://localhost:8080/dsalkfjslkjf",
ap_send_error_response отрабатывает так:

[Thu Apr 19 19:10:18 2007] [info] Initial (No.1) HTTPS request received for
child 0 (server worksol.spb.altlinux.org:443)
[Thu Apr 19 19:10:18 2007] [error] [client 127.0.0.1] File does not exist:
/var/www/html/alkjdakshdasd
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1107):
ap_send_error_response: start
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1160):
ap_send_error_response: (!r->assbackwards) is TRUE.
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1176):
ap_send_error_response: (ap_is_HTTP_REDIRECT(status) || (status ==
HTTP_CREATED)) is TRUE.
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1181):
ap_send_error_response: ((location != NULL) && *location) is TRUE.
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1214):
ap_send_error_response: (apr_table_get(r->subprocess_env,
"suppress-error-charset") != NULL) is FALSE.
[Thu Apr 19 19:10:18 2007] [debug] http_protocol.c(1323):
ap_send_error_response: END.
Comment 3 solo 2007-04-19 19:49:18 MSD
Похоже, что r->assbackwards выставляется в read_request_line (в файле
server/protocol.c)...
Comment 4 solo 2007-04-26 17:56:35 MSD
Created attachment 1926 [details]
apache2-2.2.4-alt-headers.ErrorDocument-0.2.patch

Состав патча apache2-2.2.4-alt-headers.ErrorDocument-0.2.patch
(http://git.altlinux.org/people/solo/packages/?p=apache2.git;a=commit;h=3005718e5b8415d000ad1431c1d4286acae40edb):


1. Генерация кучи отладочных сообщений

2. _Грязный_ хак на modules/ssl/ssl_engine_io.c: в макросе HTTP_ON_HTTPS_PORT
тип протакола прописан _явно_, как HTTP/1.1.

Использование п. 2 что позволяет корректно выстовить r->assbackwards (при
запросе по HTTP/1.1, если обращение идёт по другому протоколу, например по
HTTP/0.9 -- сеё вызовет ошибку), что в свою очередь -- вызывает появление в
ответе некоторых заголовков. Location при этом непоявляется, т. к. ответ
сервера идёт с r->status='400'...

На данный момент непонятно 2 вещи:

1. Как выставить правельный протокол для ответа. (Точнее, как понять что за
протокол использовался при запросе.)

2. Где и как выставляется r->status...
Comment 5 solo 2007-04-26 17:58:21 MSD
(In reply to comment #4)
> Created an attachment (id=1926) [edit]
> apache2-2.2.4-alt-headers.ErrorDocument-0.2.patch

apache2-2.2.4-alt22.debug.1, собранный с данным патчем:
http://git.altlinux.org/people/solo/packages/?p=apache2.git;a=commit;h=4f50edcd75dcae65f6c3967b3086e16d79b8276e
Comment 6 solo 2007-04-26 20:04:51 MSD
Похоже нужный статус невыстовляется в ap_read_request: входящий запрос
невыдерживает проверки на корректность ходеров, а mod_ssl при обращении по http,
их непринимает вообще...
Comment 7 solo 2007-04-28 17:23:31 MSD
Похоже надо врезаться в ssl_io_filter_error и заменять
HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc) на реально принятое сервером.

Как получить реальное значение я непонял.

Задачу откладываю.
Comment 8 Michael Shigorin 2008-05-31 11:52:24 MSD
Судя по faq.altlinux.ru (там чуть другая проблемка -- с чарсетом), у apache1
тоже с https и хедерами не всё гладко...

OTOH альтератор съехал на свой httpd.
Comment 9 Anton Farygin 2017-10-16 14:42:29 MSK
всё уже неактуально