it-swarm.com.ru

Ошибка загрузки NSURLConnection/CFURLConnection HTTP (kCFStreamErrorDomainSSL, -9813) iOS

В настоящее время я использую мыльный веб-сервис с использованием блока в ios, мой исходный код выглядит следующим образом

NSString *xml = requestXMLToSent;

NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[xml length]];
NSURL *serviceURL = [NSURL URLWithString: url];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:serviceURL];

[urlRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[urlRequest addValue: serviceURL forHTTPHeaderField:@"SOAPAction"];
[urlRequest addValue:msgLength  forHTTPHeaderField:@"Content-Length"];
[urlRequest setHTTPBody: [xml dataUsingEncoding:NSUTF8StringEncoding]];
[urlRequest setHTTPMethod:@"POST"];

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {


    if (connectionError == NULL) {

        NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response;
        NSInteger statuscode = httpResponse.statusCode;
        if (statuscode == 200) {

            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"response String  : %@",responseString);


        }else{
            NSLog(@"%@",response);

        }




    }else{

        NSLog(@"There is an error in URL connection and the Error is : %@",connectionError);
    }

Я получаю следующую ошибку @ console 

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

Произошла ошибка в соединении URL, и ошибка: Ошибка Domain = NSURLErrorDomain Code = -1202 "Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется" www.xxxxxxxx.net ", который может подвергайте свою конфиденциальную информацию риску. " UserInfo = 0x10948bbb0 {NSUnderlyingError = 0x109470d10 "Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется" www.xxxxxx.net ", который может подвергнуть риску вашу конфиденциальную информацию.", NSErrorFailingURLStringKey = https: // www .----------------------------------, NSErrorFailingURLKey = https: // ----- -------------------- NSLocalizedRecoverySuggestion = Вы все равно хотите подключиться к серверу ?, NSURLErrorFailingURLPeerTrustErrorKey =, NSLocalizedDescription = Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который притворяется «www.xxxxxx.net», что может поставить под угрозу вашу конфиденциальную информацию.}

Screenshot of error

9
Sumit Patel

Сервер выдаетSSLошибка сертификата . Для тестирования вы можете добавить следующий код в appDelegate: + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host { return YES; }

Это обойдёт ошибку SSL

Примечание: работает для NSURLConnection & UIWebView, но не для WKWebView

Отредактировано:

Для iOS 9 вышеописанная процедура не работает. Добавьте следующий фрагмент в info.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
11
Shanu ji

Я предполагаю, что вы используете схему https в своем serviceURL, и у вашего тестового сервера есть проблемы с сертификатом SSL. Если это так, и вы доверяете этому, реализуйте следующие методы в вашем NSURLConnection делегате:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    return YES;
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    if([challenge.protectionSpace.Host isEqualToString:@"127.0.0.1"] /*check if this is Host you trust: */ )
       [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}

Чтобы делегат инициализировал вашу NSURLConnection, например, с помощью метода initWithRequest:delegate:startImmediately:.

8
user2260054

В iOS 9.0 добавьте следующее в info.plist

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

Проверьте, что ваши делегаты действительно звонят.

Эта документация объясняет, что ваши делегаты не могут быть вызваны при определенных обстоятельствах.

https://developer.Apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html

Важное замечание: Классы системы загрузки URL-адресов не вызывают своих делегатов для обработки запросов, если ответ сервера не содержит заголовок WWW-Authenticate. Другие типы аутентификации, такие как прокси-аутентификация и проверка доверия TLS, не требуют этого заголовка.

0
user1951992