Веб-сайт внезапно не открывается в Safari и устройствах iOS

У меня есть этот веб-сайт, который до недавнего времени работал нормально. Теперь пользователи сообщают, что он не открывается на их iPhone и iPad.

Неважно, какой браузер вы используете на iOS, он просто не будет работать. Также он не открывается в Safari при просмотре на компьютере Mac. Однако другие браузеры работают нормально (только Mac OSX, не iOS).

Вот конфигурация сервера:

DigitalOcean + Ubuntu 18.04 + Nginx + PHP 7.3 (Laravel) + Let's Encrypt SSL + HTTP2 активирован

До того, как я объясните далее, я хочу упомянуть, что при использовании того же типа конфигурации, что и выше, у меня есть другой сервер, который работает нормально и доступен со всех устройств. Они почти идентичны (с точки зрения конфигурации и настройки), за исключением доменного имени и IP-адреса, очевидно.

Еще одна небольшая дополнительная информация, о которой я думаю, стоит упомянуть, это то, что мои пользователи находятся в Иране.

Вот список вещей, которые я проверил:

  • Домен доступен с помощью команды ping из iOS и Mac.
  • Сам IP-адрес также доступен, и его можно использовать для просмотра сайта, он просто покажет Предупреждение "недействительный сертификат ssl".
  • Все DNS, которые использовались для домена, доступны для проверки связи с iOS и Mac.
  • Если используется VPN-соединение, доступ к сайту возможен. Что действительно странно, потому что все технически доступно, домен, IP и DNS.
  • Помимо использования VPN, сайт также может быть доступен, если SSL полностью выключен / отключен.
  • Другие общедоступные веб-сайты, которые используют Let's Encrypt SSL, все они доступны. Так что это не может быть проблемой Let's Encrypt.

Вот что я пробовал до сих пор:

  • Тонны поиска в Google. Я даже сталкивался с пользователем с такой же проблемой на здесь и здесь и здесь
  • Я пытался отключить HTTP2.
  • I ' Я дважды проверил настройки своего брандмауэра и даже попытался отключить его.
  • Я попытался отключить GZIP.
  • Я провел тест ssl на ssllabs.com, и он не выявил проблем и идентичен моему рабочему серверу.
  • ] Пробовал использовать keepalive_disable "safari" в конфигурации nginx
  • Я пробовал менять местами значения ssl_protocols , например, принимать только TLSv1.3 или отбрасывать TLSv1.0
  • Пробовал использовать ssl_session_cache
  • Пытался изменить ssl_ecdh_curve на auto и secp384r1
  • Попытался изменить ssl ssl MD5; и EECDH + CHACHA20: EECDH + AES128: RSA + AES128: EECDH + AES256: RSA + AES256: EECDH + 3DES: RSA + 3DES:! MD5;
  • Попытка изменить [1112_3697] ssicklets 11123698] до [111236 99] on и off
  • Пробовал использовать Strict-Transport-Security
  • Пробовал комментировать /etc/letsencrypt/options-ssl-nginx.conf , который используется автор: certbot
  • Пробовал разные настройки перенаправления HTTP на HTTPS.
  • Я обязательно использовал приватную вкладку при тестировании, чтобы убедиться, что я не смотрю на некую некорректную кэшированную попытку доступа к сайту.
  • Я обслужил nginx перезагружал и перезапускал каждый раз, когда я вносил изменения в файлы конфигурации.
  • Я сделал много перезагрузок sudo , чтобы убедиться, что это не простая проблема с перезагрузкой.

В качестве последнего средства я даже прошел через проблема переустановки ОС с нуля и повторной настройки сервера. По-прежнему не работает. И нет, я не копировал свои файлы конфигурации, я выполнял все команды вручную и тщательно изменял файлы конфигурации, чтобы убедиться, что у меня нет проблем с предыдущей настройкой. Это также означает, что я сделал новый SSL-запрос от Let's Encrypt (используя cerbot). Хотя я не знаю, генерируют ли они новый или отправляют вам последний раз.

РЕДАКТИРОВАТЬ 1 : Я хочу подбросить сюда случайную мысль. Я действительно не знаю о продвинутых сетях, но, возможно, что-то из брандмауэров цензуры Ирана вмешивается в соединение SSL и приводит к тому, что устройства Apple не могут установить соединение. Я слышал, что Apple по-своему строга и требует определенного SSL-соединения, в отличие от Chrome и Firefox. эти 2 могут игнорировать небольшую ошибку, но устройства Apple - нет.

РЕДАКТИРОВАТЬ 2 : Я проверил Safari, пока Wireshark нажимает. Кажется, что обмениваются только несколько пакетов, что бы я ни делал. Также кажется, что Safari использует TLSv1.0, хотя я отключил его в конфигурации nginx. Я действительно не знаю, как полностью выключить его, чтобы Safari даже не пытался использовать его для связи с сервером.

РЕДАКТИРОВАТЬ 3 : Я попытался использовать другой SSL (используя трехмесячную бесплатную пробную версию ssl от comodo), и проблема все еще существует ... Я читал, что некоторые люди говорили, что они решили некоторые похожие проблемы после изменения своего SSL. Я не знаю, почему у меня это не работает.

РЕДАКТИРОВАТЬ 4 : Я решил изменить DNS-серверы домена, чтобы проверить, не проблема ли это в DNS. Я не знаю, почему и как, но после того, как я их изменил, Safari может ненадолго загрузить сайт. Но через некоторое время он снова перестал работать.

РЕДАКТИРОВАТЬ 5 :Не повезло с отключением внешних кодов сценариев на моем сайте, таких как Google Analytics (потому что их служба вроде заблокирована для иранцев). Опять же, я читал отчеты людей, подразумевающие, что некоторые исправили свою проблему, отключив внешние скрипты.

РЕДАКТИРОВАТЬ 6 : Я начинаю верить, что это не проблема с сетью или конфигурацией сервера с моей стороны. Это действительно похоже на вмешательство третьей стороны в запрос. Я не знаю об Apple и о том, как она обрабатывает сети, но я думаю, что переговоры Apple о подключении / пакетировании вызывают своего рода красный флаг, так сказать, и заставляют иранскую цензуру / брандмауэр разрывать клиентское соединение.

РЕДАКТИРОВАТЬ 7 : Я даже сменил центр обработки данных сервера, добавив новый IP-адрес. проблема все еще существует: (

РЕДАКТИРОВАТЬ 8 : Это результат /var/log/nginx/error.log , когда он установлен на debug . Он показывает эти строки, когда я инициирую запрос от клиента Safari.

nginx error.log output

Я попытался отключить php fpm, чтобы убедиться, что это не проблема узкого места php. Также я попытался настроить некоторые случайные параметры, например, увеличив net.core.somaxconn до 1024 или увеличив backlog в файлах конфигурации php fpm. Также, когда я наблюдаю за системой, использующей htop , все выглядит нормально, никаких скачков использования процессора и никакого перехода к началу списка конкретного процесса.

РЕДАКТИРОВАТЬ 9 : Я заменил Nginx на Apache2, чтобы проверить, не проблема ли это веб-сервера. Что ж, это не так.

2
задан 21 July 2019 в 15:50
4 ответа

Я нашел решение моей проблемы, хотя это больше похоже на обходной путь , чем на реальное решение.

Я только что переместил сервер на другой хостинг / центр обработки данных!

Думаю, проблема была вызвана именно DigitalOcean. Но я бы сказал, что причиной проблемы была смесь инфраструктуры DO + строгий протокол / маршрутизация SSL от Apple + иранские межсетевые экраны. Но любой из этих пунктов может быть неверным, потому что я не специалист по сетям.

0
ответ дан 3 December 2019 в 12:29

Поскольку вы сомневаетесь в наличии прокси-сервера между вами и веб-сайтом, можете ли вы обойти его, используя параметр -L в ssh? Он обеспечит безопасный туннель между вами и вашим веб-сайтом, который не может быть изменен прокси.

Например, выполните это на своем рабочем столе: ssh -L 2222: 127.0.0.1: 443 (скрыто) эта команда вошла на ваш сервер, запустите браузер на том же рабочем столе на https://127.0.0.1:2222

Если вы теперь видите себя сайта и его SSL-сертификата, все настроено правильно - кто-то посередине меняет ваше SSL-соединение, когда вы не используете туннель.

1
ответ дан 3 December 2019 в 12:29

Это может быть просто сертификат, правильно ли у вас установлено SubjectAlternativeName? Использование только SubjectName в качестве DNS-имени не рекомендуется. Используете ли вы закрепление сертификатов, сшивание OSCP, HSTP и другие относительно новые настройки TLS? Это может вызвать проблемы в регулируемых сетях.

Некоторым пользователям Интернета необходимо использовать прокси-сервер с проверкой SSL. Многие корпоративные среды используют продукты, подобные IronPort или Bluecoat, для обнаружения скрытых каналов и вредоносных программ в рамках своей политики безопасности. Способ сделать это был взят из статьи в подпольном журнале Phrack 76. Он сводится к простой настройке, при которой у каждого клиента есть дополнительный корневой сертификат CA прокси, которому он доверяет, прокси, в свою очередь, повторно инициирует соединения от имени каждый клиент, «открывающий SSL» Массачусетским технологическим институтом, такие страны, как Иран и Китай, контролируют Интернет в целом. Из-за этого нет PFS, и некоторые вещи могут выйти из строя, зависящие от проверки клиентом криптографии серверов, потому что она изменена или ssl даже полностью удален. Если вас это не волнует, вы можете понизить настройки сертификата сервера до «качества экспорта», удалив указанные параметры.

0
ответ дан 3 December 2019 в 12:29

Ответ @ austin-dixon на правильном пути. Этот тест должен быть проведен в той же стране, в которой находятся пользователи, что может не подойти, если вы еще не находитесь в этой стране.

Вы можете хотя бы проверить конфигурацию с помощью теста Qualys SSL на https: // www.ssllabs.com/ssltest/. Буквенная оценка в этом случае не имеет значения, просто прокрутите вниз до «Симуляция рукопожатия» и посмотрите, как устройства Apple должны работать при нормальных обстоятельствах.

В любом случае это просто подтверждает то, что вы уже подозреваете, что между ними есть что-то среднее. пользователи и сайт. У разработчика не так много способов обойти эту ситуацию, кроме полного отключения HTTPS. Возможно, человеку посередине требуются некоторые из более слабых комплектов шифров или более низкие версии TLS, чем настроен сервер, но я не знаю, какие из них предложить в этом случае.

0
ответ дан 3 December 2019 в 12:29

Теги

Похожие вопросы