Я хочу разрешить недействительные сертификаты SSL с AFNetworking

Я хочу разрешить недействительные сертификаты SSL. Мой основной код ниже:

myClient = [[MyClient alloc] init];
[myClient getHtml:@"/path/to/the/distination.html"];

Код класса MyClient приведен ниже:

#import <Foundation/Foundation.h>
#import "AFNetworking.h"

@interface MyClient : NSObject

- (void)getHtml:(NSString *)path;

@end

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_

@implementation MyClient

- (void)getHtml:(NSString *)path
{
    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://trusted.server.net"]];
    [httpClient getPath:path parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@", error);
    }];
}

@end

Я прочитал ниже страницу и попробовал макрос, но это не работает.

Самоподписанный сертификат SSL · Выпуск № 189 · AFNetworking / AFNetworking https://github.com/AFNetworking/AFNetworking/issues/189

Пожалуйста, помогите мне...

Ответы на вопрос(13)

и ни одно из решений, которые я прочитал, не работает.

Для меня единственный обходной путь - это установитьAFSecurityPolicy нравится:

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;

Я решил ответить, хотя вопрос старый, может быть, кто-то может помочь.

Этот является лучшим методом для разрешения недействительных сертификатов SSL с AFNetworking.

используйте добавить _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ в

проект> Настройки сборки> Макросы препроцессора и добавьте его в запись отладки.

Надеюсь, это поможет

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
 Suvo08 K15 янв. 2016 г., 20:41
Что помогает. Я добавил "self.securityPolicy.allowInvalidCertificates = YES;" в AFHTTPRequestOperationManager метод инициализации.
Решение Вопроса

дующую строку в AFURLConnectionOperation.h ниже #import Availability.h

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
 Kyle Clegg27 июн. 2013 г., 01:21
Если вы делаете это, убедитесь, что вы делаете это только в режиме отладки. Если вы используете конечные точки HTTPS и допускаете недействительные сертификаты, вы теряете значительную часть защиты, которую вы получаете от SSL.
 Ian Kershaw29 июл. 2013 г., 12:54
Есть ли способ получить позволяет InvalidSSLCertificate работать с UIImageView + AFNetworking?
 ingh.am14 сент. 2015 г., 15:25
В последней версии AFNetworking (у меня работает 2.2.3) вам теперь нужно использовать AFSecurityPolicy и установить его в качестве свойства «security» в AFHTTPRequestOperation. Видетьstackoverflow.com/a/20815306/143979 для получения дополнительной информации.
 Phil16 мая 2013 г., 14:05
Начиная с версии 1.2.1, вам больше не нужно устанавливать это определение. Вместо этого вы можете установить для свойства «allowInvalidSSLCertificate» значение YES в AFHTTPRequestOperation, что намного удобнее.
 Nikunj09 мар. 2018 г., 13:09
привет, я должен добавить#defineAFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES 1 в моем проектеAFURLConnectionOperation.h ниже #import Availability.h файл, но я получаю эту ошибку в консольОшибка: Ошибка Domain = NSURLErrorDomain Code = -1012 "(null)" UserInfo = {NSErrorFailingURLKey = мой Url.com, NSErrorFailingURLStringKey = мой Url.com} @AvtarSingh Suchariya

nitWithRequest: urlRequest];operation.securityPolicy.allowInvalidCertificates = YES;

#define- этого макроса в вашем проекте будет недостаточно - для компиляции статической библиотеки необходимо установить макрос компилятора, чтобы он вступил в силу.

 Richard Venable14 июн. 2013 г., 20:16
«Макрос компилятора должен быть установлен при компиляции статической библиотеки, чтобы он вступил в силу». Как вы это делаете?

кта AFHTTPClient. Нет необходимости использовать определения в последних версиях AFNetworking.

AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no
 NAlexN28 июн. 2017 г., 19:56
не работает для AFnetworking версии до 2.0

овом сервере все, что мне нужно, это добавить одну строку вроде этой:

mySessionManager.securityPolicy.allowInvalidCertificates = YES;

Я использую RestKit так

client.allowsInvalidSSLCertificate = YES;

не работает. Опция не распространяется на операции, созданные restkit.

Я использую cocoapods, поэтому любые изменения в файле pch или проекте pods будут отменены. «Хак», который я использовал, - это постустановочная операция cocoapod, которая добавляет необходимое определение препроцессора. В конце моего файла pod я добавил:

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    if target.name == 'Pods-AFNetworking'
      target.build_configurations.each do |config|
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << '_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1'
      end
    end
  end
end
 Carlos Ricardo05 дек. 2013 г., 13:49
О, МОЙ БОГ! Спасибо вам большое!
 bleeckerj21 дек. 2013 г., 10:19
Это также помогло мне. Хорошая вещь.
 Leszek Zarna24 мар. 2014 г., 12:28
в настоящее время objectManager.HTTPClient.allowsInvalidSSLCertificate = YES; или что-то похожее в RestKit работает
 Humber25 окт. 2013 г., 22:09
На iOS7 и XCode 5 это помогло мне. Я использую AFNetworking 1.3.3

если вы используете RestKit с помощью

client.allowsInvalidSSLCertificate = YES;

не будет работать, вместо этого сделайте это:

в вашем проекте нажмите RestKit.xcodeproj, перейдите в проект> Настройки сборки> Макросы препроцессора.

и добавить_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

это закончено.

используя менеджер для операции POST.

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //initialize
 manager.securityPolicy.allowInvalidCertificates=YES;    //allow unsigned
 manager.responseSerializer=[AFJSONResponseSerializer serializer];   //set up for JSOn  
 [manager POST:@"myweb.com" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
     //success stuff
 }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     //error stuff
}];

РЕДАКТИРОВАТЬ - быстрая версия:

    var securityPolicy = AFSecurityPolicy()
    securityPolicy.allowInvalidCertificates = true;
    manager.securityPolicy = securityPolicy;
    manager.POST(
        "https://exmaple.com/foobar.php",
        nil,
    ...

Вы должны создать подкласс AFHttpClient и переопределить

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request 
                                                success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                                                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

Это мой код

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)urlRequest success:(void (^)(AFHTTPRequestOperation *, id))success failure:(void (^)(AFHTTPRequestOperation *, NSError *))failure
{
    AFHTTPRequestOperation *operation = [super HTTPRequestOperationWithRequest:urlRequest success:success failure:failure];

    [operation setAuthenticationAgainstProtectionSpaceBlock:^BOOL(NSURLConnection *connection, NSURLProtectionSpace *protectionSpace) {
        return YES;
    }];
    [operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
        if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
            [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
        }
    }];
    return operation;
}

Вы используете этот httpclient, и он может успешно получить доступ к самоподписанной сети.

 bobics18 апр. 2013 г., 22:11
Если вы хотите разрешить самозаверяющие сертификаты программным способом и по-прежнему использовать AFHTTPClient, вам нужно сделать это следующим образом. К сожалению нет аналогаsetAuthenticationAgainstProtectionSpaceBlock для AFHTTPClient.
 Carl Veazey20 янв. 2013 г., 10:33
Зачем вам нужен подкласс для этого? Кажется, вы можете просто добавить пространство защиты и блоки проверки подлинности откуда угодно, или я что-то упустил?

если вы используете RestKit с помощью

client.allowsInvalidSSLCertificate = YES;

не будет работать, вместо этого сделайте это:

если вы добавили rest kit вручную в свой проект, нажмите RestKit.xcodeproj, перейдите в проект> Настройки сборки> Макросы препроцессора.

и добавить_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

это закончено.

 Leszek Zarna24 мар. 2014 г., 12:28
в настоящее время objectManager.HTTPClient.allowsInvalidSSLCertificate = YES; или что-то похожее в RestKit работает

Ваш ответ на вопрос