iOS AF 實現ssl網管認證

網絡安全對於一個程序員來說是一個重要的課題,實現ssl網關認證,保證網絡傳輸的安全性是每一個程序員應有的技能。廢話少說上碼。。。


1.如果想跳過ssl驗證的話

AFHTTPSessionManager * client = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:baseUrl]];[[client securityPolicy] setAllowInvalidCertificates:YES];

2.加入ssl證書

一般來講如果app用了web service , 我們需要防止數據嗅探來保證數據安全.通常的做法是用ssl來連接以防止數據抓包和嗅探

其實這麼做的話還是不夠的.我們還需要防止中間人攻擊(不明白的自己去百度)。攻擊者通過僞造的ssl證書使app連接到了僞裝的假冒的服務器上,這是個嚴重的問題!

那麼如何防止中間人攻擊呢?

首先web服務器必須提供一個ssl證書,需要一個 .crt 文件,然後設置app只能連接有效ssl證書的服務器。

在開始寫代碼前,先要把 .crt 文件轉成 .cer 文件,然後在加到xcode 裏面

openssl x509 -in 你的證書.crt -out 你的證書.cer -outform der

如果你用的是NSURLConnection,你需要這樣檢查證書,必須添加一個 NSURLConnectionDelegate  

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

用 AFNetworking 2.x的話就簡單多了,只需要添加一個AFSecurityPolicy 和 setAFHTTPRequestOperationManager

要經常用的話,推薦寫一個方法,然後以後用就可以複製黏貼了

複製代碼
- (AFSecurityPolicy*)customSecurityPolicy
{
    /**** SSL Pinning ****/
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的證書" ofType:@"cer"];
    NSData *certData = [NSData dataWithContentsOfFile:cerPath];
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init];
    [securityPolicy setAllowInvalidCertificates:NO];
    [securityPolicy setPinnedCertificates:@[certData]];
    [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate];
    /**** SSL Pinning ****/

    return securityPolicy;
}
複製代碼

 

 然後在管理器裏這麼設置

 

 

複製代碼
 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    /**** SSL Pinning ****/
    [manager setSecurityPolicy:[self customSecurityPolicy]];
    /**** SSL Pinning ****/
    
    [manager GET:@"網站的url" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) {
        //這裏是你自己的代碼了
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        //註釋同上
 }];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章