我想允许与AFNetworking无效SSL证书(I want to allow invalid S

2019-06-18 13:27发布

我想允许无效的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

请帮我...

Answer 1:

为了让无效的SSL证书AFNetworking。 添加下面一行在下面#进口Availability.h AFURLConnectionOperation.h

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1


Answer 2:

在AFNetworking 2.0,可以使用以下命令:

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;


Answer 3:

您现在可以使用AFHTTPClient的allowsInvalidSSLCertificate财产。 无需使用定义AFNetworking的最新版本。

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


Answer 4:

我使用RestKit所以

client.allowsInvalidSSLCertificate = YES;

不工作。 该选项不会传播到由restkit创建的操作。

我使用的CocoaPods所以在PCH文件或荚项目中的任何更改都会覆盖。 该“黑客”我一直在使用一个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


Answer 5:

请注意,如果您通过的CocoaPods安装, #define你的项目-ing这个宏是不够的-编译器宏必须为了让它生效编译静态库时设置。



Answer 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
}];

编辑 - SWIFT版本:

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


Answer 7:

你应该继承的AFHttpClient和override

- (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的,它可以成功地访问自签名网站。



Answer 8:

我在我的代码扩展AFHTTPSessionManager。 当对一个测试服务器测试,所有我需要的是添加这样一行:

mySessionManager.securityPolicy.allowInvalidCertificates = YES;


Answer 9:

AFHTTPRequestOperation *操作= [[AFHTTPRequestOperation的alloc] initWithRequest:的URLRequest]; operation.securityPolicy.allowInvalidCertificates = YES;



Answer 10:

如果您正在使用RestKit使用

client.allowsInvalidSSLCertificate = YES;

将无法正常工作,而不是这样做:

在你的项目中,点击RestKit.xcodeproj转到项目>构建设置>预处理宏

并添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

这就是结束。



Answer 11:

这是与AFNetworking allowign无效的SSL证书的最佳方法。

使用添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_到

项目>构建设置>预处理宏并将其添加到调试进入。

希望能帮助到你



Answer 12:

如果您正在使用RestKit使用

client.allowsInvalidSSLCertificate = YES;

将无法正常工作,而不是这样做:

如果您手动添加其余套件到您的项目,点击RestKit.xcodeproj转到项目>构建设置>预处理宏

并添加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

这就是结束。



Answer 13:

我遇到了同样的问题,而且我读作品的解决方案的任何人。

对我来说,唯一的解决方法是这样设置AFSecurityPolicy:

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

我决定回答虽然问题是旧的,也许可以帮助别人。



文章来源: I want to allow invalid SSL certificates with AFNetworking