Сертификат для данного сервера недействителен

Я знаю, что если я использую следующий 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. он отлично работает после удаления ограничений брандмауэра