iOS9 получение ошибки " произошла ошибка ssl и не удается установить безопасное соединение с сервером"
Так как я обновил свой существующий проект с iOS 9, я продолжаю получать ошибку:
Произошла ошибка SSL, и безопасное соединение с сервером не может быть установлено.
9 ответов:
Для iOS9 Apple приняла радикальное решение с iOS 9, отключив весь незащищенный HTTP-трафик из приложений iOS, как частьApp Transport Security (ATS) .
Чтобы просто отключить ATS, вы можете выполнить следующие действия, открыв Info.plist , и добавить следующие строки:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Несмотря на то, что разрешение произвольных нагрузок (
NSAllowsArbitraryLoads = true
) является хорошим обходным путем, вы не должны полностью отключать ATS, а скорее включить HTTP-соединение, которое вы хотите разрешить:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yourserver.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
IOS 9 заставляет соединения, использующие HTTPS, быть TLS 1.2, чтобы избежать недавних уязвимостей. В iOS 8 поддерживались даже незашифрованные HTTP-соединения, так что старые версии TLS также не создавали никаких проблем. В качестве обходного пути вы можете добавить этот фрагмент кода в свою информацию.плист:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
* Ссылка на App Transport Security (ATS)
Если вы просто нацелены на определенные Домены, вы можете попробовать добавить это в информацию вашего приложения.плист:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>example.com</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
Похоже, что iOS 9.0.2 прерывает запросы к допустимым конечным точкам HTTPS. Мое текущее подозрение заключается в том, что он требует сертификатов SHA-256, или он терпит неудачу с этой ошибкой.
Чтобы воспроизвести, проверьте UIWebView с помощью safari и попробуйте перейти к произвольной конечной точке HTTPS:
location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js" // [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)
Теперь попробуйте зайти в google (потому что, конечно, у них есть сертификат SHA-256):
location.href = "https://google.com" // no problemo
Добавление исключения к транспортной безопасности (как описано в ответе @stéphane-bruckert выше) работает, чтобы исправить это. Я также предположим, что полное отключение
NSAppTransportSecurity
тоже сработает, хотя я читал, что полное отключение может поставить под угрозу обзор вашего приложения.[EDIT] я обнаружил, что простое перечисление доменов, к которым я подключаюсь в
NSExceptionDomains
dict, устраняет эту проблему, даже если оставитьNSExceptionAllowsInsecureHTTPLoads
равным true. :\
Проблема заключается в ssl-сертификате на стороне сервера. Либо что-то мешает, либо сертификат не соответствует службе. Например, когда сайт имеет сертификат ssl для www.mydomain.com в то время как служба, которую вы используете, работает myservice.mydomain.com это совсем другая машина.
Я получаю ту же ошибку, когда указываю свой HTTPS URL как: https://www.mywebsite.com . Однако он прекрасно работает, когда я указываю его без трех W как: https://mywebsite.com .
Xcode project - > goto info.plist и нажмите кнопку+, затем добавить (настройки безопасности транспорта приложения)разверните, разрешить произвольные нагрузки установить да. Спасибо