sendSynchronousRequest с использованием самоподписанного сертификата, установленного в связке ключей Mac OS X для Mac - PullRequest
4 голосов
/ 16 декабря 2011

Я отправляю запрос https от Mac OS X (не iphone) на веб-сервер синхронно, используя

NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response   error:&error];

Однако я получаю Код ошибки = -1202 - «сертификат недоверенного сервера»

У меня есть самозаверяющий сертификат с сервера, который я установил в цепочку для ключей моего Mac (и проверил, что запросы https от браузера работают нормально).

Я не хочу игнорировать сертификат, отправляя данные асинхронно и обрабатывая didReceiveAuthenticationChallenge

Если sendSynchronousRequest не будет работать, если сертификат установлен в связке ключей.Я что-то упустил?

1 Ответ

0 голосов
/ 15 сентября 2013

Насколько я знаю, вы не можете сделать это с синхронным запросом.По крайней мере, с NSURLConnection.Вы можете использовать ASIHTTPRequest , и это будет выглядеть следующим образом:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setValidatesSecureCertificate:NO]
[request startSynchronous];

Если говорить о сторонних библиотеках, AFNetworking может сделать это также (несколькими способами)и у него также есть возможность работать синхронно.

#ifdef DEBUG
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_     
#endif

Наконец, что не менее важно, вы можете сделать это, перейдя на низкий уровень и используя сам CFNetworking (вы можете посмотреть на код ASIHTTPRequest, как это сделать), ноэто, вероятно, добавит больше стандартного кода, чем использование NSURLConnectionDelegate.

Я также упомянул сторонние библиотеки, потому что они используют разные подходы для асинхронизации HTTP-запросов.Я рекомендую вам взглянуть на них, потому что они могут лучше соответствовать причинам, по которым вы не хотите использовать NSURLConnectionDelegate.

...