Сертификат для данного сервера недействителен
Я знаю, что если я использую следующий nsurlconnectiondelegate, он будет исправлен
– соединение: willSendRequestForAuthenticationchallenge: – подключение:canAuthenticateAgainstProtectionspace
но я пытаюсь использовать
sendAsynchronousRequest: очередь: completionHandler:
Так что вы не получите обратный вызов. Я посмотрел в Apple docs, он говорит следующее
Если аутентификация требуется в чтобы загрузить запрос, требуемые учетные данные должны быть указаны как часть URL. Если проверка подлинности завершится неудачно или учетные данные отсутствуют, соединение попытается продолжить работу без учетных данных.
Я не мог понять, как это сделать. Когда я посмотрел все, что я получил, это частный звонок
+(void)setAllowsAnyHTTPSCertificate: (BOOL)inAllow forHost: (NSString *)inHost;
есть идеи, как это сделать?
ниже ошибка, которую я получаю
сертификат для данного сервера недействителен. Возможно, вы подключаетесь к сервер, который притворяется "примером".com=0x8b34da0 {NSErrorFailingURLStringKey=https://example.com/test/, NSLocalizedRecoverySuggestion=вы хотите подключиться к серверу в любом случае?, NSErrorFailingURLKey=https://example.com/test/, Nslocalizeddescription=сертификат для этого сервера недопустим. Вы может быть подключение к сервер, который претендует на то, чтобы быть "example.com" что может поставить под угрозу вашу конфиденциальную информацию., Nsunderlyingerror=0xa26c1c0 "сертификат для этого сервера недействительный. Возможно, вы подключаетесь к серверу, который притворяется "example.com - что может поставить под угрозу вашу конфиденциальную информацию.", NSURLErrorFailingURLPeerTrustErrorkey=
7 ответов
вы не можете исправить это так, как вы пытаетесь
- либо падение на CFNetworking, чтобы разрешить плохие сертификаты
- использовать соединение с делегатом и ЮНОДК ведет бы способ
- используйте частный API, который вы нашли
все не хорошо. CFNetwork должен быть в порядке для apple на данный момент, но другие 2 метода даже не AppStore-safe
лучше исправьте сервер. Это самый простой и Чистых
веб-сервер, который вы используете, запрашивает аутентификацию доверия сервера, вам нужно правильно ответить соответствующим действием. Вам нужно реализовать connection:willSendRequestForAuthenticationChallenge:
делегировать метод и использовать SecTrustRef для его аутентификации.
больше информации можно найти здесь:- https://developer.apple.com/library/ios/technotes/tn2232/_index.html
Это был мой код для исправления ошибки:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
NSURLProtectionSpace *protectionSpace = [challenge protectionSpace];
id<NSURLAuthenticationChallengeSender> sender = [challenge sender];
if ([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust])
{
SecTrustRef trust = [[challenge protectionSpace] serverTrust];
NSURLCredential *credential = [[NSURLCredential alloc] initWithTrust:trust];
[sender useCredential:credential forAuthenticationChallenge:challenge];
}
else
{
[sender performDefaultHandlingForAuthenticationChallenge:challenge];
}
}
Если вы используете AFNetworking
, вы можете использовать этот код:
(так же, как временное решение на стороне клиента!)
AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;
эта проблема не может быть исправлена так, как вы пытаетесь с блоками. чтобы обойти проверку сертификата, необходимо задать делегатов и реализовать делегаты проверки подлинности. Лучшее решение - либо создать правильный сертификат (убедитесь, что он не является самозаверяющим), либо изменить протокол на HTTP, если вы в порядке с ним.
Это ошибка сертификата. вам нужно изменить настройки, чтобы ваша программа/ОС игнорировала сертификат, или добавить url/сертификат в доверенный список.
Извините что проверка подлинности сертификата проверки подлинности. Я посмотрел и нашел эту статью.
Не уверен, что это решит вашу проблему, но в основном говорится, что они не охватывают случай подключения к сайту с тем, как сертификат в документация.
http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/
пожалуйста, проверьте следующую ссылку.
https://discussions.apple.com/thread/4912924?start=0&tstart=0
в моем случае эта ошибка произошла из-за того, что мой брандмауэр заблокировал требуемый url. он отлично работает после удаления ограничений брандмауэра