Ошибка SSL при подключении к серверу через iPhone
Я пытаюсь установить HTTPS-соединение с сервером с помощью моего приложения. Но соединение не удается из-за следующей ошибки
Error Domain=Nsurlerrordomain Code=-1200 " произошла ошибка SSL, и безопасное соединение с сервером не может быть выполнено."UserInfo=0x612eb30 {NSErrorFailingURLStringKey=https:myURL.com/signup, NSLocalizedRecoverySuggestion=вы все равно хотите подключиться к серверу?, NSErrorFailingURLKey=https:myURL.com/signup, NSLocalizedDescription=произошла ошибка SSL, и безопасное соединение с сервером невозможно., NSUnderlyingError=0x612eb70 "произошла ошибка SSL и безопасное подключение к серверу невозможно."}
код для подключения к серверу
-(IBAction) handleEvents:(id)sender
{
if ((UIButton*)sender == submit) {
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSLog(@"Begin");
NSData *urlData;
NSURLResponse *response;
NSError *error;
NSString *url =[[NSString alloc]initWithFormat:@"%@signup",baseURL];
NSURL *theURL =[NSURL URLWithString:url];
NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:0.0f];
[theRequest setHTTPMethod:@"POST"];
NSString *theBodyString = [NSString stringWithFormat:@"emailId=%@&mobileNumber=%@&appId=%@&password=%@&firstName=%@&lastName=%@"
,@"abc@example.com",@"919879876780",@"bf1c7a6b3d266a7fe350fcfc4dda275211c13c23" ,@"qwerty" , @"Dev" , @"Sri"];
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
[theRequest setHTTPBody:theBodyData];
urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];
}
}
мои методы делегата
- (void)handleError:(NSError *)error
{
NSLog(@"----->%@",error);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge {
NSLog(@"check auth");
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
Я застрял здесь и не мог найти никакого выхода.
любая форма помощи была бы весьма признательна.
спасибо вперед!!
8 ответов
iOS 9 заставляет соединения, использующие HTTPS, быть TLS 1.2, чтобы избежать недавних уязвимостей. В iOS 8 поддерживались даже незашифрованные HTTP-соединения, так что более старые версии TLS также не создавали проблем. В качестве обходного пути вы можете добавить этот фрагмент кода в свою информацию.файл plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
таким образом, вы отключаете безопасность транспорта приложения. Надеюсь, это поможет.
Так как он был оставлен без ответа в течение длительного времени, и мои исследования и текущие разработки показывают, что код отлично подходит для соединения, его сертификат на сервере, который не был подписан авторизованным ЦС. поэтому любой, у кого есть такая проблема, проверяет, действителен ли сертификат на сервере или нет.
надеюсь, это поможет!!
взгляните на эту страницу: https://github.com/vinhnx/iOS-issues/issues/1
в двух словах:
Причина в том, что начиная с iOS9 и OSX 10.11 все приложения, построенные на XCode7, будут требовать TLS 1.2 для SSL-соединения и терпеть неудачу для более ранних протоколов.
Существует несколько методов решения этой проблемы.
Подход" NSAppTransportSecurity -> NSAllowsArbitraryLoads " не хорош, потому что он отключит TLS 1.2 для всех соединений из вашего приложения, и это может привести к отклонению вашего приложения Apple.
Подход "исключения для каждого домена" намного лучше.
Я использовал iOS 9.3.1 и использовал https, когда я столкнулся с этой проблемой. Он отлично работал через симулятор, но не удался на моем iPad. Причина в том, что мой iPad был включен WiFi и подключен к гостевой сети моей компании, но я не получил всплывающий веб-сайт, где я принимаю участие в сети. После принятия все снова работало нормально.
пожалуйста, убедитесь, что версия TLS is 1.2, не TLS 1.0
.
приложения, построенные на XCode8
потребуется TLS 1.2
для SSL-соединения
даже я столкнулся с той же проблемой.
эта проблема может возникнуть, если сертификат SSL через сервер-это отдельный сертификат. В таком случае вы можете решить с помощью этой.