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 · Issue #189 · AFNetworking/AFNetworking https://github.com/AFNetworking/AFNetworking/issues/189

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

4

13 に答える 13

45

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

[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
于 2014-01-04T02:26:25.957 に答える
41

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

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
于 2013-02-20T13:38:44.927 に答える
24

AFHTTPClient の allowInvalidSSLCertificate プロパティを使用できるようになりました。最新バージョンの AFNetworking で定義を使用する必要はありません。

AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no
于 2013-05-16T15:43:30.667 に答える
8

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

于 2012-10-30T07:05:07.043 に答える
5

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,
    ...
于 2014-03-02T22:03:12.623 に答える
4

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

mySessionManager.securityPolicy.allowInvalidCertificates = YES;
于 2015-06-14T14:46:38.323 に答える
4

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 に正常にアクセスできます。

于 2013-01-20T09:14:14.440 に答える
1

RestKit を使用している場合

client.allowsInvalidSSLCertificate = YES;

動作しません。代わりに次のようにします。

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

そして追加_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1

以上で終了です。

于 2014-01-27T15:44:00.863 に答える
0

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

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

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

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

于 2015-05-25T13:54:03.480 に答える