AFNetWorking https SSL認證

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

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

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

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

?.crt 文件轉成 .cer 文件

1.使用openssl 進行轉換

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

2.通過安裝crt文件,電腦導出

1)先打開“鑰匙串訪問”

2)選中你安裝的crt文件證書,選擇“文件”--》“導出項目”

?

3)選擇.cer證書,存儲即可。

AFNetworking 對數據進行https ssl加密

實際上,很簡單,只需要兩步。

第一步:新增一個類

復制代碼
+ (AFSecurityPolicy*)customSecurityPolicy{?? // /先導入證書??? NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"hgcang" 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 = NO;?? securityPolicy.pinnedCertificates = @[certData];??????? ?return securityPolicy; }
復制代碼

第二步:直接在請求方法里加入,只有一行代碼

復制代碼
+ (void)post:(NSString *)url params:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure{?? // 1.獲得請求管理者??? AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];??? ?// 2.申明返回的結果是text/html類型??? mgr.responseSerializer = [AFHTTPResponseSerializer serializer];?????? // 加上這行代碼,https ssl 驗證。??? ?//[mgr setSecurityPolicy:[self customSecurityPolicy]];?????? // 3.發送POST請求?? [mgr POST:url parameters:params????? success:^(AFHTTPRequestOperation *operation, id responseObj) {????? ?if (success) {??? ????????? success(responseObj);?? ?????? }?? ?? } failure:^(AFHTTPRequestOperation *operation, NSError *error) { ????????? if (failure) {????????????? failure(error);?? ?????? }?? ?? }];}
復制代碼

接下來,我們通過Charles抓取數據,抓到的數據已經加密。

可能遇到的問題

1)證書一定要拉到項目里面,AFN加了驗證之后,看看獲取證書的certData是否為空。如果為空,則證書有問題

NSData *certData = [NSData dataWithContentsOfFile:cerPath];

2.如果https服務器沒有數據返回,很大可能是因為服務器配置出了問題。

?

附Demo:?http://download.csdn.net/detail/jys1216/9412638

demo里的cer文件,我是在AFN里找的,certData是有數據的。

?

參考文章

iOS安全系列之一:HTTPS ?:http://oncenote.com/2014/10/21/Security-1-HTTPS/??

轉載于:https://www.cnblogs.com/yangqinglong/p/5543363.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372918.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

查看環境列表_Xfce 4.14桌面環境正式發布,想要圖形界面又想節省內存?就它了...

1. Xfce 4.14桌面環境正式發布,它有什么新特性?本文主要講解Xfce 4.14桌面環境正式發布,它有什么新特性。Xfce已經開發了4年多,但是這個周末終于看到了期待已久的Xfce 4.14的發布。Xfce 4.14是這個輕量級桌面環境的最新穩定版本&a…

使用Log4jdbc記錄JDBC操作

當我們開發任何應用程序,完成它或結束其任何模塊時,我們都會開始優化過程。 大多數應用程序都包含數據庫訪問權限,并且如果您使用的是ORM ,則可能會使用hibernate 。 優化休眠持久層,要求準備閱讀,理解和評…

android BluetoothAdapter藍牙BLE掃描總結

做室內定位的程序員應該都知道,在Android 5.0之后,google推出了藍牙掃描新接口,我們在實測中發現出一些問題,現在給大家列出,以供參考: 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLe…

卷積神經網絡語音識別_用于物體識別的3D卷積神經網絡

本文提出了一種基于CNN的3D物體識別方法,能夠從3D圖像表示中識別3D物體,并在比較了不同的體素時的準確性。已有文獻中,3D CNN使用3D點云數據集或者RGBD圖像來構建3D CNNs,但是CNN也可以用于直接識別物體體積表示的體素。本文中&am…

段落排版--對齊(text-aliagn)

想為塊狀元素中的文本、圖片設置居中樣式嗎&#xff1f;可以使用text-align樣式代碼&#xff0c;如下代碼可實現文本居中顯示。(那么什么是塊狀元素呢&#xff1f;后面會講到呢~) h1{text-align:center; } <h1>了不起的蓋茨比</h1> 同樣可以設置居左&#xff1a; h…

Java 7:在不丟失數據的情況下關閉NIO.2文件通道

關閉異步文件通道可能非常困難。 如果您將I / O任務提交到異步通道&#xff0c;則需要確保正確執行了任務。 實際上&#xff0c;出于多種原因&#xff0c;這對于異步通道可能是一個棘手的要求。 默認的通道組使用守護進程線程作為工作線程&#xff0c;這不是一個好選擇&#xf…

JavaScript封裝方法,兼容參數類型為Number和String

/*** 依據Kind確定跳轉到目標列表頁面。* param kind*/function gobackByKind(kind) {var kindStr String(kind);switch(kindStr){case "1"://跳轉到客戶列表頁面window.location.href/biz/customer/list;break;case "2"://跳轉到代理機構列表頁面window.…

#獲得請求來源ip_以太網數據包TCP、IP、ICMP、UDP、ARP協議頭結構詳解

以太網首部目地MAC地址(8字節)源MAC地址(8字節)類型(2字節)1、IP頭的結構版本(4位)頭長度(4位)服務類型(8位)封包總長度(16位)封包標識(16位)標志(3位)片斷偏移地址(13位)存活時間(8位)協議(8位)校驗和(16位)來源IP地址(32位)目的IP地址(32位)選項(可選)填充(可選)數據(1)字節和…

團隊項目第二次沖刺Ⅶ

今天將整體代碼的編碼方式改了&#xff0c;作業模塊基本修改完成 遇到的問題是對于添加問答模塊無從下手轉載于:https://www.cnblogs.com/brucekun/p/5573312.html

編寫Play 2的模塊,第2部分:攔截器

在本教程的第一部分中&#xff0c;我們介紹了創建&#xff0c;發布和調用模塊的基本知識。 我們創建的模塊并沒有真正做很多事情&#xff0c;因此現在是時候使用Play的某些功能來擴展功能了。 1.攔截器 攔截器使您可以攔截對控制器的調用&#xff0c;并增強或阻止其行為。 在第…

c# ef報錯_C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案

C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案---修改步驟---1.打開Nuget管理包&#xff0c;把Mysql.Data替換為6.10.0以下任意版本。這里選擇的是6.8.82.修改完畢后&#xff0c;繼續把Mysql.Data.Entity也修改為對應版本6.8.8。3.安裝完成后可以看到App.Co…

js格式化時間

Date.prototype.format function(fmt) {var o { "M" : this.getMonth()1, //月份 "d" : this.getDate(), //日 "h" : this.getHours(), //小時 "m" : this.getMinu…

PHP---函數

一.函數定義的四個要素 返回類型&#xff0c;函數名&#xff0c;參數列表&#xff0c;函數體 //1.最簡單的定義方式/*function show(){ echo "hello";}show();*///2.有參數的函數定義/*function show($a){ echo $a;}show("bbbbb");*///3.有默認值的函數定義…

ServletRequest startAsync()的有用性有限

前段時間我遇到了Servlet 3.0中AsyncContext.start&#xff08;…&#xff09;的目的是什么&#xff1f; 題。 引用上述方法的Javadoc &#xff1a; 使容器調度線程&#xff08;可能從托管線程池中&#xff09;運行指定的Runnable 。 提醒大家&#xff0c; AsyncContext是Servl…

mysql所支持的比較運算符_mysql比較運算符有哪些?Mysql比較運算符詳解

比較運算符可用于比較數字和字符串。今天發一篇Mysql比較運算符詳解&#xff0c;希望對初學者有所幫助&#xff0c;雖然現在流行NoSQL&#xff0c;但是MYSQL還是很有用的&#xff0c;數字作為浮點值進行比較&#xff0c;字符串以不區為例進行比較&#xff0c;運算符用于比較表達…

數據結構0類模板的使用

類模板的使用 #include <iostream> #include <conio.h> #include <string> #define N 3 using namespace std;template <class numtype> class Swap{public :Swap(numtype a,numtype b){xa;yb;}numtype ___(){tempx;xy;ytemp;return x;}//testnumtype …

JavaScript 函數

函數 由于JavaScript的函數也是一個對象&#xff0c;所以類似function abs(v){}函數實際上是一個函數對象&#xff0c;而函數名abs可以視為指向該函數的變量。 因此&#xff0c;第二種定義函數的方式如下&#xff1a; var abs function (x) {if (x > 0) {return x;} else {…

Http Invoker的Spring Remoting支持

Spring HTTP Invoker是Java到Java遠程處理的重要解決方案。 該技術使用標準的Java序列化機制通過HTTP公開服務&#xff0c;并且可以被視為替代解決方案&#xff0c;而不是Hessian和Burlap中的自定義序列化。 而且&#xff0c;它僅由Spring提供&#xff0c;因此客戶端和服務器應…

mysql 日期列表_MySQL 生成日期表

1、創建一個num表&#xff0c;用來存儲數字0~9CREATE TABLE num (i int);2、在num表中生成0~9INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);3、生成一個存儲日期的表&#xff0c;datalist是字段名CREATE TABLE if not exists calendar(dateli…

學習后綴自動機想法

小序&#xff1a;學習后綴自動機是要有耐心的&#xff0c;clj的論文自己看真心酸爽&#xff01;&#xff08;還是自己太弱&#xff0c;ls&#xff0c;oyzx好勁啊&#xff0c;狂膜不止&#xff09; 剛剛在寫博客之前又看了篇論文&#xff0c;終于看懂了&#xff0c;好開心 正文&…