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

1 ответ

Решение

Насколько мне известно, 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, что он мог бы просто остаться незамеченным.)

Другие вопросы по тегам