HTTPS не працює з Safari


16

У мене є екземпляр EC2 з Apache як веб-сервер (і Wildfly як сервер додатків, хоча я не впевнений, що це має відношення до цієї проблеми). Перед EC2 у мене є балансир навантаження, який припиняє HTTPS і застосовує SSL cert.

І HTTP, і HTTPS відмінно працюють у Chrome, але, на жаль, не в Safari. Доступ до http://test.papereed.com працює чудово, але доступ до https://test.papereed.com дає помилку

"Safari can't open the page. The error is "The operation couldn't be completed. Protocol error" (NSPOSIXErrorDomain:100)"

Я переглянув / etc / httpd / logs / error_log та / etc / httpd / logs / access_log, а також у консолі Safari, не знайшовши жодних підказів щодо вирішення проблеми. І ось про те, як далеко проходять мої знання :-( Будь-які натяки, як простежити це питання, були б дуже вдячні.

Відповіді:


22

curl (якщо компільований з підтримкою HTTP / 2) виявляє ту ж проблему, але показує причину:

Помилка http2: отримано неправильне поле заголовка HTTP: тип кадру: 1, потік: 1, ім'я: [оновлення], значення: [h2, h2c]

Схоже, ваш сервер пропонує оновлення до HTTP / 2, хоча з'єднання вже зроблено з HTTP / 2 - що не має сенсу. Мало того, це прямо заборонено. Із RFC 7540 розділу 8.1.2.2 :

Кінцева точка НЕ ​​ПОВИННА генерувати повідомлення HTTP / 2, що містить специфічні для заголовка поля; будь-яке повідомлення, що містить специфічні для підключення поля заголовка, ОБОВ'ЯЗКОВО трактуватись як неправильно сформовані (Розділ 8.1.2.6) .... специфічні для заголовка поля, такі як Keep-Alive, Proxy-Connection, Transfer-Encoding та Upgrade

Мені здається помилка, оскільки Apache не повинен надсилати цей заголовок разом із HTTP / 2.

Я здогадуюсь, що у вас є така конфігурація

Protocols h2 h2c http/1.1

Зважаючи на те, що браузери так і не підтримують HTTP / 2 без TLS і що для HTTP / 2 над TLS не потрібен заголовок Upgrade, я рекомендую замінити цю конфігурацію на

Protocols h2 http/1.1

Це вимикає підтримку непотрібного HTTP / 2 без TLS, але, сподіваємось, таким чином слід позбутися заголовка Upgrade, оскільки це потрібно лише для оновлення з звичайного HTTP до звичайного HTTP / 2.

EDIT: згідно з коментарем ОП зміна Protocolsконфігурації не допомогла. Необхідно було чітко обійти цю поведінку (тобто помилку) mod_http2, видаливши Upgradeзаголовок:

Header unset Upgrade

3
Дякую! Я дійсно мав таку конфігурацію: # Enable HTTP/2 by default # https://httpd.apache.org/docs/2.4/mod/core.html#protocols <IfModule mod_http2.c> Protocols h2 h2c http/1.1 </IfModule> Після вашої рекомендації та зміни на Protocols h2 http/1.1не видаляв заголовок оновлення, тому замість цього я зберігав рядок протоколів таким, який є, і додав наступне: Header unset Upgradeвидалити заголовок. Не можу сказати, що я на 100%
перевершує

@jola: дякую за відгук. Я включив це у відповідь.
Steffen Ullrich

3

Я думаю, що це питання Safari, а не AWS / SSL. Пошук цієї помилки отримує багато, багато результатів в Google.

Все перевіряється на веб-сайті відповідно до тесту SSL Shopper і SSL Labs Test .

Я знайшов таке можливе рішення проблеми.

Рішення полягало в тому, щоб перейти до налаштувань Safari у розділі Конфіденційність та перерахувати всі подробиці. Це забезпечило журнал усіх сайтів, де використовувались файли cookie тощо. Я знайшов сторінку домену Weather Weather і очистив з неї весь вміст. Потім мені вдалося перезавантажити сторінку Метеорологічної мережі без проблем. Я припускаю, що це спрацює для інших подібних сингулярних сайтів.

Є також те, що можна зробити з Apache.


Так, я переглянув це, але не знайшов нічого, що безпосередньо стосується (afaiu). Я читав запропоноване рішення для nginx, але не знаю, як / якщо це застосовно до apache.
Джола

Apache, без сумніву, зможе видалити заголовок "Оновлення" , що все, що робить Nginx.
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.