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