it-roy-ru.com

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

Я знаю, что если я использую следующую nsurlconnectiondelegate, это будет исправлено

- connection: willSendRequestForAuthenticationChallenge: – Подключение: canAuthenticateAgainstProtectionSpace

Но я пытаюсь использовать 

sendAsynchronousRequest: очереди: completionHandler:

Таким образом, вы не получите обратный вызов. Я посмотрел в Apple документы, которые говорят следующие

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

Я не мог понять, как это сделать. Когда я посмотрел, все, что я получил, это этот частный звонок

+ (void) setAllowsAnyHTTPSCertificate: (BOOL) inAllow forHost: (NSString *) inHost;

Есть идеи как это сделать?

Вот ошибка, которую я получаю

Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к сервер, который притворяется «example.com = 0x8b34da0 {NSErrorFailingURLStringKey = https://example.com/test/ , NSLocalizedRecoverySuggestion = Хотите подключиться к серверу в любом случае ?, NSErrorFailingURLKey = https://example.com/test/ , NSLocalizedDescription = Сертификат для этого сервера недействителен. Вы возможно, подключается к серверу, который притворяется «example.com» которые могут поставить вашу конфиденциальную информацию под угрозу., NSUnderlyingError = 0xa26c1c0 "Сертификат для этого сервера недействителен Возможно, вы подключаетесь к серверу, который притворяется « Example.com », который может подвергнуть риску вашу конфиденциальную информацию.", NSURLErrorFailingURLPeerTrustErrorKey =

10
pa12

вы не можете исправить это так, как вы пытаетесь

  • либо перейдите на CFNetworking, чтобы разрешить плохие сертификаты
  • использовать NSConnection с делегатом и отменить метод
  • использовать найденный вами частный API

все не хорошо. CFNetwork пока должен быть в порядке для Apple, но другие 2 метода даже не безопасны для магазина приложений

Лучше исправить сервер. Это самый простой и чистый 

3
Daij-Djan

Веб-сервер, который вы используете, запрашивает проверку подлинности на уровне доверия сервера, вам нужно правильно ответить соответствующим действием. Вам необходимо реализовать метод делегата 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];
    }
}
8
Mohd Iftekhar Qurashi

Если вы используете AFNetworking, вы можете использовать этот код: 

(Так же, как временное решение на стороне клиента!)

AFHTTPSessionManager * apiManager = [AFHTTPSessionManager initWithBaseURL:[NSURL URLWithString:baseURL];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
policy.allowInvalidCertificates = YES;
apiManager.securityPolicy = policy;
4
skywinder

Эта проблема не может быть решена с помощью того, как вы пытаетесь с блоками. вам нужно установить делегатов и внедрить делегатов вызова аутентификации, чтобы обойти проверку сертификата. Лучшее решение - либо создать правильный сертификат (убедитесь, что он не самоподписан), либо изменить протокол на HTTP, если вам это подходит.

1
prajothdsa

Это ошибка сертификата. вам нужно изменить настройки так, чтобы ваша программа/операционная система игнорировала сертификат или добавила URL/сертификат в список доверенных.

Извините, это аутентификация, сертификат это аутентификация. Я посмотрел, и я нашел эту статью.

Не уверен, что это решит вашу проблему, но в основном говорится, что они не охватывают случай подключения к сайту, как сертификат в документации.

http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

0
am6sigma

Пожалуйста, проверьте следующую ссылку.

https://discussions.Apple.com/thread/4912924?start=0&tstart=0

0
Bera Bhavin

В моем случае эта ошибка произошла из-за того, что мой брандмауэр заблокировал требуемый URL. после снятия ограничений брандмауэра все работало нормально

0
arunjos007