2015-10-28 3 views
1

Я пытаюсь подключиться к самоподписанному серверу HTTPS на iOS 9.1.iOS App Transport Исключения безопасности не работает

Я использую:

[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; 

И я получаю ошибку о том, что сертификат недействителен:

Error Domain=NSURLErrorDomain Code=-1202 "<French error saying the certificate is invalid" 
UserInfo= 
    {NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x13c768140>, 
    NSLocalizedRecoverySuggestion=<French recovery suggestion asking if the user wants to connect anyway>, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9813, NSErrorPeerCertificateChainKey=<CFArray 0x13d82ffe0 [0x1a1242b68]> 

Я попытался добавить все возможные исключения транспортной безопасности, мою нынешнюю попытку является:

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>mydomain.org</key> 
      <dict> 
       <key>NSExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
       <key>NSExceptionRequiresForwardSecrecy</key> 
       <false/> 
       <key>NSIncludesSubdomains</key> 
       <true/> 
       <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> 
       <true/> 
      </dict> 
     </dict> 
    </dict> 

Я также попытался NSAllowsArbitraryLoads, но даже это не работает. У меня есть несколько файлов .plist (cocoapods и tests), я думаю, что он в правильном (App/Supporting Files/Info.plist).

Любая идея о том, что может быть неправильным?

ответ

1

Вы должны добавить это в конце, как этот

<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 
<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

+1

Я пробовал это, но это не сработало. – Julien

0

Так что это была проблема NSURLConnection, а не приложение транспорта.

Для записей, и для тех, кто может столкнуться с той же проблемой, я установил это временно, вызвав частный метод (не делать этого):

+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host; 

Это не будет принимается Apple. Реальное решение - с delegate methods, я отредактирую этот ответ, когда мы будем работать над этим (мой клиент - «разработчик», поэтому я использовал его вариант, он сказал, что мы выясним позже, и мы спешим ...)

0

я решил проблемы, используя следующие шаги

  1. файл PLIST Открытого проекта
  2. Добавить ключ «NSAppTransportSecurity» и типа словарь
  3. Добавить внутренний ключ «NSAllowsArbitraryLoads», как логические ДА

enter image description here

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