簡介:
關于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];