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

HTTPS не работает с Safari

У меня есть экземпляр EC2 с Apache в качестве веб-сервера (и Wildfly в качестве сервера приложений, хотя я не уверен, что это имеет какое-либо отношение к этой проблеме). Перед EC2 у меня есть балансировщик нагрузки, который завершает HTTPS и применяет сертификат SSL.

И 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, но не нашел никаких подсказок для решения проблемы. И это о том, как далеко зашли мои знания :-( Любые подсказки, как отследить эту проблему, были бы очень признательны.

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 и Обновить

Мне кажется, это ошибка, так как Apache не должен отправлять этот заголовок с HTTP / 2.

Я предполагаю, что у вас есть такая конфигурация

Protocols h2 h2c http/1.1

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

Protocols h2 http/1.1

Это отключает поддержку ненужного HTTP / 2 без TLS, но следует надеяться, что таким образом можно избавиться от заголовка Upgrade, поскольку он нужен только для обновления с простого HTTP на простой HTTP / 2.

РЕДАКТИРОВАТЬ: согласно комментарию OP, изменяющему Protocols настройка не помогла. Необходимо было явно обойти это поведение (то есть ошибку) mod_http2 удалив Upgrade заголовок:

Header unset Upgrade

Я думаю, что это проблема Safari, а не AWS / SSL. Поиск этой ошибки дает много-много результатов в Google.

Все проверяется на сайте в соответствии с SSL Shopper test и SSL Labs Test.

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

Решение заключалось в том, чтобы войти в настройки Safari в разделе «Конфиденциальность» и перечислить все детали. Это предоставило журнал всех сайтов, где использовались файлы cookie и т. Д. Я нашел страницу домена Weather Network и удалил с нее все содержимое. Затем я смог без проблем перезагрузить страницу Weather Network. Я предполагаю, что это сработает для других подобных отдельных сайтов.

Есть также этот что можно было сделать с помощью Apache.

Nginx: Header unset Upgrade; не работает, если вы проксируете свой запрос, используйте proxy_hide_header Upgrade; вместо.