AFNetWorkingによるHTTPSリクエスト
4980 ワード
iOS 9
の新しいプロパティApp Transport Security
のため、要求アドレスを一時的にすべての許可またはホワイトリストを追加するしかありません.NSAppTransportSecurity
NSAllowsArbitraryLoads
NSAppTransportSecurity
NSAllowsArbitraryLoads
NSExceptionDomains
.com
NSIncludesSubdomains
NSTemporaryExceptionAllowsInsecureHTTPLoads
NSTemporaryExceptionMinimumTLSVersion
TLSv1.1
Key
コメント
NSAllowsArbitraryLoads
trueを設定するとすべてのHTTPリクエストがサポートされます
NSExceptionDomains
ホワイトリストを追加
NSExceptionMinimumTLSVersion
ホワイトリストドメイン名でサポートされているTLSバージョンを指定
NSExceptionRequiresForwardSecrecy
ホワイトリストはドメイン名がForward Secrecyをサポートするかどうかを指定します
NSExceptionAllowsInsecureHTTPLoads
ホワイトリスト指定ドメイン名ATS無効
NSThirdPartyExceptionMinimumTLSVersion
ホワイトリストサードパーティのサービスドメイン名の最低サポートTLSバージョンを指定
NSThirdPartyExceptionRequiresForwardSecrecy
ホワイトリストサードパーティのサービスドメイン名がForward Secrecyをサポートするかどうかを指定します.
NSThirdPartyExceptionAllowsInsecureHTTPLoads
ホワイトリストサードパーティドメイン名を指定してATSを無効にする
アップルは2017年に不安全なhttpアクセスを全面的に停止すると発表したため、上記のホワイトリストを追加する方法も廃棄される.
近い将来、httpsアクセスをサポートするためにTLSバージョンをアップグレードしなければなりません.この部分については詳しく説明しません.
AFNetWorking
を使用してHTTPS
リクエストを行う方法について簡単に説明します.一般的にappが
web service
を使用している場合、データのセキュリティを保証するためにデータの嗅覚を防止する必要があります.通常、sslで接続してデータのパケットと嗅覚を防止すると同時に、仲介者の攻撃を防止する必要があります.攻撃者は偽造したssl証明書を通じてappを偽装した偽造サーバーに接続した.どのように解決しますか?まず、webサーバはssl証明書を提供する必要があります.
.crt
ファイルが必要です.その後、appが有効なssl証明書にしか接続できないサーバを設定します.コードの書き込みを開始する前に、
.crt
ファイルを.cer
ファイルに転送し、プロジェクトをインポートします.インポートcerファイル
.crt
を.cer
ファイルに変換openssl x509 -in XXX.crt -out XXX.cer -outform der
.crt
ファイルをインストールし、
に入り、インストールした.crt
ファイルを選択し、
->
を選択し、保存形式は.cer
である.その後、Xcodeが開発したプロジェクトに導入するとともに、
.plist
ファイルで以下の設定を行います.NSAppTransportSecurity
NSAllowsArbitraryLoads
AFNリクエスト
コード部分は
AFSecurityPolicy.h
というクラスに使用されます.公式の説明を参照してください.AFSecurityPolicy
evaluates server trust against pinned X.509 certificates and public keys over secure connections. Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. すなわち、セキュリティポリシー認証に使用されていることがわかる
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"XXX" ofType:@"cer"];
NSData * certData = [NSData dataWithContentsOfFile:cerPath];
NSSet * certDataSet = [[NSSet alloc] initWithObjects:certData, nil];
AFSecurityPolicy * securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = certDataSet;
検証モード
AFSSLPinningMode
必要に応じて選択し、証明書を検証しない場合はAFSSLPinningModeNone
、検証.cer
はAFSSLPinningModeCertificate
AFSSLPinningModeNone,
AFSSLPinningModePublicKey,
AFSSLPinningModeCertificate,
allowInvalidCertificates
は無効な証明書(自己構築証明書)を許可し、デフォルトはNOである.検証が必要な場合はYESに変更validatesDomainName
ドメイン名を検証する必要があるかどうか、デフォルトはYESです.NOの場合、サーバは他の信頼できる機関から発行された証明書を使用して接続を確立することもでき、主にクライアントが要求したのはサブドメイン名であり、証明書上のは別のドメイン名である場合、ワイルドカードドメイン名を登録して検証することもできます.pinnedCertificates
認証された証明書の内容AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.securityPolicy = securityPolicy;
NSString * url = @"https://...";
[manager GET:url parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
注意:Demoはサンプルコードを示しています.具体的な証明書と住所は実際の状況に応じて変更してください.