iOS対応Https

2889 ワード

アップルは17年の1月1日の審査でATSを強制的に開くことを要求したため、各アプリケーションのプログラマーはhttpsの適合を開始した.弊社の相性をご紹介します.原理:HTTPS接続の確立過程は大体、クライアントとサービス側が接続する時、サービス側は1つの証明書を返して、クライアントの中に信頼された証明書機構のルート証明書が保存して、これらのルート証明書でサービス側が返した証明書に対して検証を行って、経験証は証明書が信頼できるならば、pre-master secretを生成して、この証明書の公開鍵で暗号化してサービス側に送信し、サービス側は秘密鍵で復号してpre-master secretを得、あるアルゴリズムに基づいてmaster secretを生成し、クライアントも同様にこのアルゴリズムに基づいてpre-master secretからmaster secretを生成し、その後、双方の通信はこのmaster secretで伝送データを暗号解読する.
開発:我々の応用は猿題ライブラリを用いたネットワーク要求であり,猿題ライブラリはAFNetworkingに基づいてカプセル化されているため,httpsの検証は主にAFSecurityPolicyモジュールである.
/**
      
 */
@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode;

/**
        
 */
@property (nonatomic, strong, nullable) NSArray *pinnedCertificates;

/**
                     
 */
@property (nonatomic, assign) BOOL allowInvalidCertificates;

/**
         
 */
@property (nonatomic, assign) BOOL validatesDomainName;

/**
         ,      bundle     cer  
*/
+ (instancetype)defaultPolicy;

/**
           
 */
- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
                  forDomain:(nullable NSString *)domain;

もしあなたが私と同じように猿題庫のフレームワークを使っていたら、あなたはこのようにする必要があります.
    //   HTTPS
    YTKNetworkConfig *config = [YTKNetworkConfig sharedInstance];
    config.baseUrl = @"";
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"" ofType:@""];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    config.securityPolicy.allowInvalidCertificates = YES;
    config.securityPolicy.validatesDomainName = NO;
    config.securityPolicy.pinnedCertificates = @[certData];

これでほぼ終わりです.このときサードパーティの共有や統計のあるsdkを使うなら、sdkを交換すればいいです.httpを追加できない場合はplistに説明を追加する必要があります.
    sina.com.cn 
    
        NSIncludesSubdomains
        
        NSThirdPartyExceptionAllowsInsecureHTTPLoads
        
        NSExceptionMinimumTLSVersion
        TLSv1.0
        NSThirdPartyExceptionRequiresForwardSecrecy
        
    

サーバがcdnまたはossオブジェクトに格納されている場合、アリクラウドに証明書を添付すればよいので、秘密鍵をアップロードする必要があります(これは少し心配です)、彼のデフォルトの構成はhttpとhttpをサポートしているので、古いユーザーには影響しません.httpダウンロードに変更すると、証明書検証を使用できますが、ダウンロードを容易にするためには、このステップはありません.NSURLConnectionのコールバックでは、これだけです.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
//      
    NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
    [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
}

アップルがこのようにするのも、ユーザーのデータセキュリティとプライバシーのためで、多くのメーカーや開発者を不快にさせているが、長期的に見れば大勢の傾向にあるので、苦労してすぐに似合うようにしましょう.补充:実はクライアントはHttpsに适合して证明书を强制しなければならないことはなくて、直接URLを交换すればいいです.