iOS 11: произошла ошибка SSL, и невозможно установить соединение с сервером

Когда я пытаюсь подключиться к Server (which is IIS), я получаю следующую ошибку в окне консоли:

Ошибка API: Произошла ошибка SSL, и безопасное соединение с сервером не может быть установлено, поэтому вход в систему невозможен.

Я использую Xcode 9.2, iOS 11.

Ниже приведены решения, которые я пробовал, но не сработал:

  1. App Transport Security Settings -> Allow Arbitrary Loads -> YES

  2. Add exception domain и т. д.

  3. Устраните неполадки IIS вместе с серверной командой и выяснили, что он не защищен, т. Е. Нет HTTPS или SSL.

Это моя конфигурация plist ATS

Скриншот

P.S. Этот проект написан на Objective-C еще в 2014 году сторонним поставщиком. Эта проблема связана с языком Objective-C? (ну я так не думаю)

Любое исправление?


person Jayprakash Dubey    schedule 19.03.2018    source источник
comment
ваша серверная сторона правильно связывает сертификат или нет? если да, то проверьте свой веб-сайт здесь --› ssllabs.com/ssltest   -  person iNiravKotecha    schedule 19.03.2018
comment
@NiravKotecha: сервер не установлен как защищенный. Нет HTTPS или SSL. Это просто abc.pqr.lmn   -  person Jayprakash Dubey    schedule 19.03.2018
comment
Я не уверен, что это проблема, но пробовали ли вы удалить часть https:// из имени домена в конфигурации?   -  person Mats    schedule 19.03.2018
comment
В доменном имени нет https. Это просто abc.pqr.lmn   -  person Jayprakash Dubey    schedule 19.03.2018
comment
Но вы указали протокол в своем Info.plist, показанном выше. исключения домена должны быть просто доменом. например abc.def.com, не http://abc.def.com.   -  person wottle    schedule 20.03.2018
comment
@wottle: сначала я проверил с abc.def.com, это не сработало, затем я попытался с abc.def.com, что тоже не сработало.   -  person Jayprakash Dubey    schedule 20.03.2018


Ответы (1)


Судя по скриншоту, вы можете использовать домен .dev. Если это так, вы не сможете отключить ATS, потому что Google владеет доменом .dev, и они решили требовать, чтобы все домены .dev требовали HTTPS. В iOS 11 Apple поддерживает предварительную загрузку HSTS, которая позволяет ограничивать определенные домены только безопасным соединением. Домен верхнего уровня (TLD) .dev теперь является одним из тех TLD, для которых требуется HTTPS. Подробнее об этом читайте здесь: https://stackoverflow.com/a/47698675/3708242

На скриншоте есть исключение ATS, оканчивающееся на .dev, но в ваших комментариях указан другой домен. Я предполагаю, что в вашем Info.plist может быть несколько исключений, и вы используете .dev для внутреннего тестирования на локальном сервере. Если это так, просто измените домен для внутреннего тестирования на что-то другое, кроме *.dev. Кроме того, исключение на вашем снимке экрана не является правильным, поскольку оно включает http:// в домен исключения. Вместо записи в InfoPlist, например "http://mylocalserver.local", у вас должно быть просто "mylocalserver.local " (без http://).

Если ваша запись для abc.pqr.lmn такая же (она также включает протокол в домене исключений), удалите «http://», и все должно работать.

Кроме того, ваш список исключений немного беспорядок. Если вы вообще не используете https, вы сможете удалить все записи, кроме NSExceptionAllowsInsecureLoads. Все остальные параметры, которые вы указываете, предназначены для того, чтобы разрешить подключения HTTPS, которые не поддерживают минимальные требования для ATS. Если вы просто пытаетесь получить незащищенный HTTP-трафик, избавьтесь от остальных.

Итак, вкратце:

  1. Не используйте домен .dev для локального тестирования, так как Google теперь владеет доменом верхнего уровня и требует, чтобы все новые браузеры/операционные системы использовали HTTPS при подключении ко всему, что заканчивается на .dev.
  2. Не включайте «http://» в домены исключений ATS в вашем Info.plist.
  3. Это не имеет ничего общего с тем, что оно находится в Objective-C — это связано с тем, что iOS 11 реализует предварительную загрузку HSTS.
person wottle    schedule 19.03.2018
comment
Кроме того, для получения дополнительной информации о том, как избежать TLD .dev, вот отличная статья, объясняющая проблему предварительной загрузки HTST: medium.engineering/use-a-dev-domain-not-anymore-95219778e6fd - person wottle; 20.03.2018
comment
Спасибо за Ваш ответ! Позвольте мне попробовать это и даст ответ. Также конечная точка, к которой я обращаюсь, — xxx.xxxengine.local.dev. Я упомянул abc.pqr.lmn в только что пришедшем комментарии. - person Jayprakash Dubey; 20.03.2018
comment
Хорошо, я не был уверен, но увидел .dev на вашем скриншоте. Это определенно вызовет проблемы в iOS 11, если вы попытаетесь подключиться к любому домену .dev без HTTPS. Кроме того, вы можете подтвердить, что это проблема, попробовав попасть на сервер в Safari. Safari также учитывает список предварительной загрузки HTST. - person wottle; 20.03.2018
comment
Прочитав сообщение на Medium, я протестировал приложение на Xcode 8.3.3, и оно работает нормально. Но это не рекомендуемое решение, поэтому мы попытаемся удалить .dev из домена. Еще раз большое спасибо дружище!! - person Jayprakash Dubey; 21.03.2018
comment
Ты спас меня! Я застрял с этой проблемой в течение последних 3 дней... Большое спасибо! - person Jayprakash Dubey; 21.03.2018
comment
Без проблем. Я знаю, что это затронуло многих разработчиков, когда в iOS 11 был добавлен домен предварительной загрузки .dev HSTS. Рад, что у вас это работает. - person wottle; 21.03.2018
comment
Итак, решение состоит в том, чтобы не использовать .dev? или просто удалить .dev из домена? - person n0minal; 19.08.2020
comment
Да, Apple соблюдает HSTS, а Google владеет доменом верхнего уровня .dev и установил для любого домена .dev требование HTTPS. Поскольку вы не можете получить сертификат от Google для вашего локального сервера для поддержки TLS для домена .dev, просто измените домен на что-то вроде .local. - person wottle; 20.08.2020