Bug 11559 - apache2 не всегда отдаёт заголовки при использовании mod_ssl
: apache2 не всегда отдаёт заголовки при использовании mod_ssl
Status: CLOSED WONTFIX
: Sisyphus
(All bugs in Sisyphus/apache2)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-04-18 15:29 by
Modified: 2017-10-16 14:42 (History)


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


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-04-18 15:29:19
Метод воспроизводства:
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 From 2007-04-19 19:04:38 -------
Created an attachment (id=1913) [details]
apache2-2.2.4-alt-headers.ErrorDocument-0.1.patch

Патч для вывода отладки ap_send_error_response.
------- Comment #2 From 2007-04-19 19:19:26 -------
После прикладывания 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 From 2007-04-19 19:49:18 -------
Похоже, что r->assbackwards выставляется в read_request_line (в файле
server/protocol.c)...
------- Comment #4 From 2007-04-26 17:56:35 -------
Created an attachment (id=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 From 2007-04-26 17:58:21 -------
(In reply to comment #4)
> Created an attachment (id=1926) [edit] [details]
> 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 From 2007-04-26 20:04:51 -------
Похоже нужный статус невыстовляется в ap_read_request: входящий запрос
невыдерживает проверки на корректность ходеров, а mod_ssl при обращении по
http,
их непринимает вообще...
------- Comment #7 From 2007-04-28 17:23:31 -------
Похоже надо врезаться в ssl_io_filter_error и заменять
HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc) на реально принятое сервером.

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

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

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