ошибка получения iOS9 "произошла ошибка ssl, и безопасное соединение с сервером не может быть выполнено"



Так как я обновил свой существующий проект с iOS 9, я продолжаю получать сообщение об ошибке:




произошла ошибка SSL и не удается установить безопасное соединение с сервером.


1155   9  

9 ответов:

для iOS9 Apple приняла радикальное решение с iOS 9, отключив весь незащищенный HTTP-трафик из приложений iOS, как часть App Transport Security (ATS).

чтобы просто отключить ATS, вы можете выполнить следующие действия, открыв информация.файл 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 также не создавали никаких проблем. В качестве обходного пути вы можете добавить этот фрагмент кода в свою информацию.файл plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

*ссылка на App Transport Security (ATS)

enter image description here

Если вы просто ориентируетесь на определенные Домены, вы можете попробовать добавить это в информацию вашего приложения.файл plist:

<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

добавить исключение в области обеспечения транспортной безопасности (как показано на @Стефан-bruckert ответ выше) работает, чтобы исправить это. Я также предполагаю, что полностью отключить NSAppTransportSecurity будет работать тоже, хотя я читал, что полное отключение его может поставить под угрозу ваш обзор приложения.

[EDIT] я обнаружил, что просто перечисляю домены, к которым я подключаюсь в NSExceptionDomains dict исправляет эту проблему, даже когда уходит NSExceptionAllowsInsecureHTTPLoads значение true. :\

проблема заключается в SSL-сертификате на стороне сервера. Либо что-то мешает, либо сертификат не соответствует службе. Например, когда сайт имеет сертификат ssl для www.mydomain.com пока служба, которую вы используете, работает myservice.mydomain.com-это другая машина.

Я получаю ту же ошибку, когда я указываю свой URL HTTPS как:https://www.mywebsite.com . Однако он отлично работает, когда я указываю его без трех W как:https://mywebsite.com .

Xcode project - > goto info.plist и нажмите кнопку+, затем добавьте (настройки безопасности транспорта приложения)разверните, разрешите произвольные нагрузки установить да. Спасибо

моя проблема была NSURLConnection и это было устаревшим в iOS9, поэтому я изменил все API на NSURLSession и это исправило мою проблему.

NSURLConnection устарел в iOS9

Comments

    Ничего не найдено.