AFN使用HTTPS



轉換成功後需要找到你轉換成.cer的文件.添加到你的xcode工程當中去;

我用的是AFN2.x 需要添加AFSecuriPolicy和setAFHTTPRequestOperationManager, 如下


- (AFSecurityPolicy*)SecurityPolicy

{

    NSString *cerPath = [[NSBundlemainBundlepathForResource:@"your certificate"ofType:@"cer"];

    NSData *certData = [NSDatadataWithContentsOfFile:cerPath];

    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicyallocinit];

    [securityPolicy setAllowInvalidCertificates:YES];

    [securityPolicy setPinnedCertificates:@[certData]];

    [securityPolicy setSSLPinningMode:AFSSLPinningModePublicKey];

    return securityPolicy;

}    


管理器設置


   AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    [manager setSecurityPolicy:[selfSecurityPolicy]]; 

   manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager GET:@"your Url" parameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

        NSLog(@"成功了");

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"Error: %@", error);

    }];

    

}

 這樣就可以了,你run一下 會打印出來的信息如下:



這說明請求還是失敗的,那具體改如何解決呢? 需要你將下面的代碼添加上就OK了!

securityPolicy.allowInvalidCertificates =NO;

    securityPolicy.validatesDomainName =YES;

    securityPolicy.validatesCertificateChain =NO;


allowInvalidCertificates 是否允許無效證書(也就是自建的證書),默認爲NO;

如果是需要驗證自建證書,需要設置爲YES

validatesDomainName 是否需要驗證域名,默認爲YES

假如證書的域名與你請求的域名不一致,需把該項設置爲NO;如設成NO的話,即服務器使用其他可信任機構頒發的證書,也可以建立連接,這個非常危險,建議打開。

置爲NO,主要用於這種情況:客戶端請求的是子域名,而證書上的是另外一個域名。因爲SSL證書上的域名是獨立

validatesCertificateChain 是否驗證整個證書鏈,默認爲YES, 設置爲YES,會將服務器返回的Trust Object上的證書鏈與本地導入的證書進行對比,達到驗證的效果,(對於這具體不明白的可以百度)!


好了 現在你run一下就沒問題了, 一切就OK 了!

如有說的不對的地方請指出(見諒)!


發佈了58 篇原創文章 · 獲贊 27 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章