iOS AFNetworking SDWebImage HTTPS 請求

簡介:

關于2017.1.1號前必須更換HTTPS的說法是謠傳,仔細看下搜索結果的文章,都是賣證書的軟文謠傳出這個日期的,就此事咨詢了Apple開發者計劃支持給的結果:我了解您想知道有關 HTTPS 的問題,我為您查詢過,我們的 WWDC 里有提及過 App Transport Security 要求 HTTPS。但目前為止,我們對于開發者上還沒有這個規定,所以,暫時不須馬上更改為 HTTPS。一旦有新的規定,我們一定會通知我們的開發者。

最新消息:Apple宣布延期HTTPS更改計劃(暫未公布最后期限)

官網鏈接:https://developer.apple.com/news/?id=12212016b

當然,從去年到今年Apple不斷在強調HTTPS的概念,想必不久后更改HTTPS也是趨勢,小伙伴們可以先點個喜歡,關注下作者。作者會在后期持續的更新Apple關于HTTPS的相關動態!留著以后備用哦;

先簡要說下,證書分兩種:

1,自簽證書

2,購買的權威ssl證書,大概一個域名一年2000左右,當然也有通配的更貴了;

認證方式也分兩種:

1,單向

2,雙向

證書相關:協議TLS v1.2 以上,安全等級AES-128 和 SHA-2 以及 ECDHC

如果公司是購買的權威SSL證書(現在有一部分云服務器提供商提供免費認證服務,所以不一定需要購買),那你什么都不用做,只需要把接口http改成https,刪掉plist文件里 Allow Arbitrary Loads,到此,你可以點個關注和喜歡就可以關閉此網頁了;怎么知道證書是否經過認證:把后臺給你的測試鏈接用瀏覽器打開,如果有彈窗,一般就是自簽的,不受信任的!不彈窗則是經過權威認證的,例如你打開百度,沒有彈窗吧;

我這邊測試是用的自簽證書,單向認證。建議小伙伴們先和后臺寫個小 demo測試。下面講下需要做的:

1,得到.crt證書

先給后臺發過去這個:TLS v1.2 以上,AES-128 和 SHA-2 以及 ECDHC 等,什么東西呢?證書的安全等級以及一些算法要求之類的,好吧,我被坑了一回,因為后臺給我的是 SHA-1,當然我也沒提前跟他說。哈哈,然后請求各種不成功;

讓后臺給你.crt的證書,然后轉換成.cer,進入證書所在目錄,執行命令:

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

然后把.cer導入工程

刪掉plist? ? ? ? ? ? ? Allow Arbitrary Loads

2,獲取AFSecurityPolicy

+ (AFSecurityPolicy *)customSecurityPolicy

{

//先導入證書,找到證書的路徑

NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"https" ofType:@"cer"];

NSData *certData = [NSData dataWithContentsOfFile:cerPath];

? ? NSLog(@"%@",certData);

//AFSSLPinningModeCertificate 使用證書驗證模式

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

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

securityPolicy.allowInvalidCertificates = YES;

//validatesDomainName 是否需要驗證域名,默認為YES;

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

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

//如置為NO,建議自己添加對應域名的校驗邏輯。

securityPolicy.validatesDomainName = YES;

NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];

securityPolicy.pinnedCertificates = set;

return securityPolicy;

}


3,AFHTTPSessionManager(就是多加一句代碼)

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

// 調用剛才的類方法,得到AFSecurityPolicy

[manager setSecurityPolicy:[YLNetworkingManager customSecurityPolicy]];

NSString *url = @"";

[manager POST:url parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id? _Nullable responseObject) {

NSLog(@"%@",responseObject);

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];

NSLog(@"https:%@",dic);

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"%@",error);

}];

好了,只不過是加幾句代碼,不要被網上眾多的信息弄懵逼了 0.0,上面已經說了,先問后臺是單向認證還是雙向,然后證書是自簽還是購買的,購買的你只需要把接口的http改成https,我這里是自簽的單向認證的;如果有做雙向認證的朋友可以參考以下鏈接:

雙向認證:

afn_2.X版本:http://www.68idc.cn/help/jiabenmake/qita/20150508336834.html

afn_3.X版本:http://www.lxweimin.com/p/9e573607be13

主要是梳理下,以防萌新蒙蔽,筆者新手上路,老司機勿噴...0.0,不對的還請留言;

SDWebImage 加載HTTPS鏈接圖片

目前找到的方法是跳過驗證。

[img sd_setImageWithURL:imgurl placeholderImage:nil options:SDWebImageAllowInvalidSSLCertificates];


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文來自 http://www.2cto.com/kf/201611/570823.html 蘋果官方在2017...
    生活本無度閱讀 6,378評論 1 5
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文傳播,帶來了三大風險。 (1)竊聽風險...
    XLsn0w閱讀 10,746評論 2 44
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,582評論 0 13
  • 你總是說那個人,他們,其實是不是應該多看看自己呢
    勞資迷死你閱讀 229評論 0 0
  • 此夜的心,在顫栗。明知道的結果,卻不能提早去改變,還是原本就不應該開始。此夜的心,在痛。但是再痛,還是要勇敢。要努...
    冷月初陽hcp閱讀 230評論 0 0