Подтвердить что ты не робот

Я хочу разрешить недействительные 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

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

4b9b3361

Ответ 1

Чтобы разрешить неверный сертификат SSL с AFNetworking. Добавьте следующую строку в AFURLConnectionOperation.h ниже #import Availability.h

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1

Ответ 2

В AFNetworking 2.0 вы можете использовать следующее:

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;

Ответ 3

Теперь вы можете использовать свойство allowInvalidSSLCertificate AFHTTPClient. Нет необходимости использовать определения в последних версиях AFNetworking.

AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no

Ответ 4

Я использую RestKit, поэтому

client.allowsInvalidSSLCertificate = YES;

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

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

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

Ответ 5

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

Ответ 6

Здесь вы можете сделать это, используя диспетчер для операции 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
}];

EDIT - быстрая версия:

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

Ответ 7

Вы должны подклассифицировать 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, и он может успешно получить доступ к самонастраиваемому веб-сайту.

Ответ 8

Я расширил AFHTTPSessionManager в своем коде. При тестировании на тестовом сервере все, что мне нужно, это добавить одну строку следующим образом:

mySessionManager.securityPolicy.allowInvalidCertificates = YES;

Ответ 9

AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc] initWithRequest: urlRequest]; operation.securityPolicy.allowInvalidCertificates = YES;

Ответ 10

если вы используете RestKit, используя

client.allowsInvalidSSLCertificate = YES;

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

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

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

thats finished.

Ответ 11

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

используйте _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ для

project > Параметры сборки > Макросы препроцессора и добавьте их в Debug запись.

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

Ответ 12

если вы используете RestKit, используя

client.allowsInvalidSSLCertificate = YES;

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

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

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

thats finished.

Ответ 13

Я столкнулся с одной и той же проблемой, и ни одно из решений, которые я читаю, не работает.

Для меня единственным обходным решением является AFSecurityPolicy:

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

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