iOS 之 HTTPS集成實戰應用

臨時想起來忘記把項目中用到的https集成整理收藏起來,以備後續不時之需。新手通常瞭解以下步驟便可:html

1. HTTP 和 HTTPS 基本知識和學習ios

  http://www.cnblogs.com/xiaopin/p/6428941.htmlapi

  或者百度查看更多安全

  iOS 9適配系列教程:改用更安全的HTTPS服務器

  iOS開發適配HTTPS詳細教程      學習

  iOS AFN之https配置小結測試

2. 服務器google

  跟領導或者後臺開發人員說讓服務器配置https 支持,最好是http和https雙向支持。通常https是要收費的,咱們公司買了一個。而後讓他們將一個*.cer證書文件發給你。orm

3. 將cer文件導入到開發項目中,或者拖到哪一個目錄下,本身決定htm

4. 我用的是AFNetworking, 只須要添加以下代碼便可使用。親測可用

 將如下方法放到通用數據接口訪問類裏面,我是這麼作的

/**
 https簽名調用

 @return <#return value description#>
 */
- (AFSecurityPolicy*)customSecurityPolicy
{
    // /先導入證書
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"api_cde_net" ofType:@"cer"];//證書的路徑
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    
    // AFSSLPinningModeCertificate 使用證書驗證模式
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
    
    // allowInvalidCertificates 是否容許無效證書(也就是自建的證書),默認爲NO
    // 若是是須要驗證自建證書,須要設置爲YES
    securityPolicy.allowInvalidCertificates = YES;
    
    //validatesDomainName 是否須要驗證域名,默認爲YES;
    //假如證書的域名與你請求的域名不一致,需把該項設置爲NO;如設成NO的話,即服務器使用其餘可信任機構頒發的證書,也能夠創建鏈接,這個很是危險,建議打開。
    //置爲NO,主要用於這種狀況:客戶端請求的是子域名,而證書上的是另一個域名。由於SSL證書上的域名是獨立的,假如證書上註冊的域名是www.google.com,那麼mail.google.com是沒法驗證經過的;固然,有錢能夠註冊通配符的域名*.google.com,但這個仍是比較貴的。
    //如置爲NO,建議本身添加對應域名的校驗邏輯。
    securityPolicy.validatesDomainName = YES;
    
    NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
    securityPolicy.pinnedCertificates = set;
    
    return securityPolicy;
}

  在調用後臺接口的方法中,這樣配置和請求接口:

//3.構建請求對象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
    manager.securityPolicy = [self customSecurityPolicy];  //【重點是這句】
    if(self.responseFormat == XPFResponseJSON) {
        manager.responseSerializer = [AFJSONResponseSerializer serializer];
    } else {
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    }
    
    //4.開始請求
    if(self.requestMethod == XPFRequestMethodGet)
    {
        [manager GET:requestURL parameters:requestParams progress:progressBlock success:successBlock failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"【錯誤信息】:\n%@",[error description]);
            if(failureBlock){
                failureBlock(task,error);
            }
        }];
    }

  5. 測試看看是否正常,親測可用

相關文章
相關標籤/搜索