Назад | Перейти на главную страницу

Apache не обновляет подключение к TLS

Я написал IPP-сервер на PHP, работающий под Apache. Со стандартными клиентами IPP все работает нормально. Но когда я пытаюсь печатать с устройства iOS, соединение прерывается, когда клиент пытается переключиться на TLS. Похоже, что это предусмотрено RFC 2817 (Обновление до TLS в HTTP / 1.1) и должно поддерживаться Apache в течение многих лет. Что не так с моей конфигурацией Apache?

Конфигурация Apache SSL:

SSLEngine optional
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key

Запрос:

OPTIONS * HTTP/1.1
Connection: Upgrade
Host: iserv.local
Upgrade: TLS/1.0,SSL/2.0,SSL/3.0
User-Agent: CUPS/1.5.0

Ответить:

HTTP/1.1 200 OK
Server: Apache/2.2.16
Content-Length: 0
Content-Type: text/plain

Ожидаемый ответ:

HTTP/1.1 101 Switching Protocol
Server: CUPS/1.4
Connection: Keep-Alive
Keep-Alive: timeout=30
Connection: Upgrade
Upgrade: TLS/1.0,HTTP/1.1
Content-Length: 0

Насколько мне известно, Apache Httpd поддерживает RFC 2817 начиная с версии 2.1.

Чтобы использовать его, вы должны использовать SSLEngine optional (вместо более распространенного SSLEngine on для HTTPS), как указано в документация.

РЕДАКТИРОВАТЬ (Я не знал, что вы уже использовали SSLEngine optional):

Похоже, что эта проблема связана именно с OPTIONS * HTTP/1.1. Он будет работать, когда вы отправите OPTIONS / HTTP/1.1 (или OPTIONS / HTTP/1.1) с такими же заголовками обновлений.

После небольшого расследования кажется, что OPTIONS * просто вообще не работает в последних версиях Apache Httpd (или, по крайней мере, работает иначе).

Если вы попробуете Debian Etch (Apache Httpd 2.2.3), простой OPTIONS * HTTP/1.1Host заголовок) даст вам ответ с Allow: GET,HEAD,POST,OPTIONS и Vary заголовки.

На Debian Lenny (Apache Httpd 2.2.9 с несколькими дополнительными исправлениями безопасности) и более поздних версиях вы не получите эти Allow или Vary заголовки вообще. Вы получите их с OPTIONS /.

Я подозреваю, что что-то изменилось в пути OPTIONS * обрабатывалась между этими версиями. (Это также может иметь какое-то отношение к проблемам, упомянутым в эта тема.) Это определенно повлияет на обновление RFC 2817 через OPTIONS *.

Я бы посоветовал спросить об этом пользователя Apache Httpd или, возможно, список разработчиков.

Похоже, это может быть ошибка. (Использование для OPTIONS * встречается довольно редко, и настолько немногие клиенты поддерживают RFC 2817, что это могло бы остаться незамеченным.)