У меня была похожая проблема. В моем случае у меня было a-синхронное соединение, работающее с ssl, как требуется, с использованием двух методов делегата, которые позволили мне принять любой сертификат:
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}
Но я застрял на том же синхронном режиме. Я искал в Интернете, пока не нашел ваше сообщение и, к сожалению, еще одно сообщение stackoverflow , где намекнули, что вы не можете выполнять синхронизирующие вызовы NSURLConnection и работать с ssl (из-за отсутствия делегата для обработки процесса аутентификации ssl ).
В итоге я получил ASIHTTPRequest и использовал его. Это было безболезненно, и мне потребовалось около часа, чтобы все настроить. вот как я это использую.
+ (NSString *) getSynchronously:(NSDictionary *)parameters {
NSURL *url = [NSURL URLWithString:@"https://localhost:8443/MyApp/";
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSString *parameterJSONString = [parameters JSONRepresentation];
[request appendPostString:parameterJSONString];
[request addRequestHeader:@"User-Agent" value:@"MyAgent"];
request.timeOutSeconds = CONNECTION_TIME_OUT_INTERVAL;
[request setValidatesSecureCertificate:NO];
[request startSynchronous];
NSString *responseString = [request responseString];
if (request.error) {
NSLog(@"Server connection failed: %@", [request.error localizedDescription]);
} else {
NSLog(@"Server response: %@", responseString);
}
return responseString;
}
Важной частью, конечно же, является
[request setValidatesSecureCertificate:NO];
Другая альтернатива для вас - обработать загрузку в другом потоке с подключением a-synch, используя два вышеописанных метода, и заблокировать поток, из которого вы хотите, подключение синхронизации до тех пор, пока запрос не будет завершен