無効な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
私を助けてください...
AFNetworkingで無効なSSL証明書を許可するには。 AFURLConnectionOperation.hの#import Availability.hの下に次の行を追加します
#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1
AFNetworking 2.0では、次を使用できます。
[AFHTTPRequestOperationManager manager].securityPolicy.allowInvalidCertificates = YES;
これで、AFHTTPClientのallowInvalidSSLCertificateプロパティを使用できます。 AFNetworkingの最新バージョンでは、定義を使用する必要はありません。
AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:@"url"];
client.allowsInvalidSSLCertificate = YES; //this defaults to no
私は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
CocoaPodsを使用してインストールする場合は、#define
-プロジェクトでこのマクロを実行するだけでは十分ではありません-静的ライブラリを有効にするには、静的ライブラリのコンパイル時にコンパイラマクロを設定する必要があります。
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,
...
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に正常にアクセスできます。
コードでAFHTTPSessionManagerを拡張しました。テストサーバーに対してテストする場合、次のような1行を追加するだけです。
mySessionManager.securityPolicy.allowInvalidCertificates = YES;
AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest]; operation.securityPolicy.allowInvalidCertificates = YES;
restKitを使用している場合
client.allowsInvalidSSLCertificate = YES;
動作しません、代わりにこれを行います:
プロジェクトで、RestKit.xcodeprojをクリックしてプロジェクトに移動>ビルド設定>プリプロセッサマクロ
_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1
を追加します
終わりました。
restKitを使用している場合
client.allowsInvalidSSLCertificate = YES;
動作しません、代わりにこれを行います:
レストキットをプロジェクトに手動で追加した場合は、RestKit.xcodeprojをクリックしてプロジェクトに移動>ビルド設定>プリプロセッサマクロ
_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_=1
を追加します
終わりました。
これ は、AFNetworkingで無効なSSL証明書を許可するための最良の方法です。
_AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_を追加して使用する
プロジェクト>ビルド設定>プリプロセッサマクロをデバッグエントリに追加します。
それが役に立てば幸い
私は同じ問題に遭遇し、私が読んだ解決策のどれも機能しません。
私にとって唯一の回避策はAFSecurityPolicyを次のように設定することです:
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
質問は古いですが、誰かを助けることができるかもしれませんが、私は返信することにしました。