2016-03-23 4 views
1

У меня есть приложение iOS, которое использует SSL/HTTPS для связи с сервером. Сервер предоставляет сертификат, который работает над TLSv1.2 (основное требование безопасности транспорта приложений). Пример URL, который демонстрирует это (где TLSv1.2 может быть проверен путем проверки сертификата) - https://api.branon.co.uk/checkOnline.iOS App Transport Безопасность, не допускающая соединения TLSv1.2 и исключения plist, не имеет значения

Однако приложение вызывает ошибки, связанные с уровнем транспорта приложений - ошибки, которые при использовании Googled подразумевают, что сервер не работает над TLSv1.2. Пример ошибки:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

и:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

Я даже добавил кучу исключений в файл Plist, например:

<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key><my top level domain - the app uses a subdomain - allowed below></key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
      <true/> 
      <key>NSTemporaryExceptionMinimumTLSVersion</key> 
      <string>TLSv1.1</string> 
     </dict> 
    </dict> 
</dict> 
</plist> 

, но это Безразлично Не изменяйте результат.

Используемый сертификат является бесплатным сертификатом от StartCom. Моя конфигурация nginx приведена ниже (только для справки).

server { 
    listen [::]:443 ssl; 
    listen 443 ssl; 
    ssl on; 
    ssl_certificate /root/ssl/<domain>.crt; 
    ssl_certificate_key /root/ssl/server.key; 
    server_name api.<domain>; 
    access_log /var/log/nginx/api.access.log; 
    error_log /var/log/nginx/api.error.log; 
    location ~ ^/([a-zA-Z]+)$ { 
     proxy_pass http://127.0.0.1:5000/$1; 
    } 
} 

Есть ли у кого-нибудь идеи, почему это происходит?

Спасибо!

Update: По результатам @ Paulw11 предложено, тест (ниже) работает nscurl, я решил просто попробовать отключить App Transport Security полностью. Я изменил словарь безопасности в приложении для переноски приложений в своем plist:

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

и по-прежнему получаю ту же ошибку! Так что, если это не App Transport Security, что может быть причиной этого? Это ошибка, я получаю снова: NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

+0

Что вы получите, если вы запустите 'nscurl -ats-diagnostics * yoururl * --verbose' в терминале OS X? – Paulw11

+0

@ Paulw11 Каждый тест проходит. Это очень запутанно! Любая идея, почему iOS все равно будет отвергать это? –

+1

Вы пробовали использовать промежуточный сертификат для api.branon.co.uk через директиву ssl_certificate в nginx?(комбайнировать .crt и <промежуточный сертификат>, полученный с https://whatsmychaincert.com/?api.branon.co.uk) –

ответ

1

server does not provide a complete certificate chain в своем рукопожатии SSL/TLS. Хотя некоторые клиенты могут справиться с этим и построить цепочку доверия, другие не могут.

Вы можете найти отсутствующий промежуточный сертификат через https://whatsmychaincert.com/?api.branon.co.uk и подавать его вместе с сертификатом своего сайта в вашей конфигурации SSL в nginx.

Не забудьте удалить любые исключения ATS, которые вы, возможно, установили на место!

1

Формат ключей, которые я использую, чтобы старые версии TLS (для amazonaws, например) выглядит следующим образом:

<key>NSIncludesSubdomains</key> 
<string>NO</string> 
<key>NSThirdPartyExceptionMinimumTLSVersion</key> 
<string>TLSv1.1</string> 
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
<string>NO</string> 

Остальная часть структура выглядит одинаково. В какой-то момент у нас это было на корневом уровне.

<key>NSExceptionMinimumTLSVersion</key> 
<string>TLSv1.0</string> 
+0

, добавив это (и изменив домен на мой поддомен и «NSIncludesSubdomains» на NO, чтобы соответствовать вашим). Я получаю очень похожую ошибку: «Ошибка загрузки NSURLSession/NSURLConnection HTTP (kCFStreamErrorDomainSSL, -9802)' –

+0

Но я не знаю Не думаю, что это связано с версией TLS - сервер, кажется, удобно работает на TLSv1.2 (см. 'https: // api.branon.co.uk/checkOnline') –

 Смежные вопросы

  • Нет связанных вопросов^_^