web-dev-qa-db-ja.com

AFNetworkingで無効なSSL証明書を許可したい

無効な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・Issue#189・AFNetworking/AFNetworkinghttps://github.com/AFNetworking/AFNetworking/issues/189

私を助けてください...

27
Feel Physics

AFNetworkingで無効なSSL証明書を許可するには。 AFURLConnectionOperation.hの#import Availability.hの下に次の行を追加します

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
40

AFNetworking 2.0では、次を使用できます。

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
45
titaniumdecoy

これで、AFHTTPClientのallowInvalidSSLCertificateプロパティを使用できます。 AFNetworkingの最新バージョンでは、定義を使用する必要はありません。

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

私はRestKitを使用しています

client.allowsInvalidSSLCertificate = YES;

動作しません。このオプションは、restkitによって作成された操作には反映されません。

私はココアポッドを使用しているため、pchファイルまたはポッドプロジェクトの変更は上書きされます。私が使用している「ハック」は、必要なプリプロセッサ定義を追加するココアポッドのポストインストール操作です。ポッドファイルの最後に追加しました:

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
12

CocoaPodsを使用してインストールする場合は、#define-プロジェクトでこのマクロを実行するだけでは十分ではありません-静的ライブラリを有効にするには、静的ライブラリのコンパイル時にコンパイラマクロを設定する必要があります。

8
mattt

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,
    ...
5
user3344717

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を使用すると、自己署名のないWebに正常にアクセスできます。

4
jasonhao

コードでAFHTTPSessionManagerを拡張しました。テストサーバーに対してテストする場合、次のような1行を追加するだけです。

mySessionManager.securityPolicy.allowInvalidCertificates = YES;
4
Donald

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

3
aqavi_paracha

restKitを使用している場合

client.allowsInvalidSSLCertificate = YES;

動作しません、代わりにこれを行います:

プロジェクトで、RestKit.xcodeprojをクリックしてプロジェクトに移動>ビルド設定>プリプロセッサマクロ

_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1を追加します

終わりました。

2

restKitを使用している場合

client.allowsInvalidSSLCertificate = YES;

動作しません、代わりにこれを行います:

レストキットをプロジェクトに手動で追加した場合は、RestKit.xcodeprojをクリックしてプロジェクトに移動>ビルド設定>プリプロセッサマクロ

_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1を追加します

終わりました。

1

これ は、AFNetworkingで無効なSSL証明書を許可するための最良の方法です。

_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_を追加して使用する

プロジェクト>ビルド設定>プリプロセッサマクロをデバッグエントリに追加します。

それが役に立てば幸い

1

私は同じ問題に遭遇し、私が読んだ解決策のどれも機能しません。

私にとって唯一の回避策はAFSecurityPolicyを次のように設定することです:

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

質問は古いですが、誰かを助けることができるかもしれませんが、私は返信することにしました。

0