A. iOS 網路數據安全(防止抓包)
在上個例子中,小客和小服在溝通中存在一個很大的安全隱患,假設郵差在送信過程中被人攔截下來,並篡改了信的內容,這樣就會導致隱私泄露和信息被惡意修改問題,並且小客和小服完全不知道發生了什麼。我們如果使http請求更安全呢?
A 參考 https://github.com/SmileZXLee/aboutHttp.git
1.服務端生成一對公鑰和私鑰把公鑰交給客戶端,
當客戶端需要進行數據請求的時候,數據加密處理,客戶端保存的公鑰,對請求數據進行加密傳給後台,後台利用私鑰對請求解密,拿出參數進行處理後再加密返回給客戶端.客戶端對返回的數據進行解密然後進行界面的展示
2.其實第一個很多時候就可以了.對於復雜的APP,有很多介面是不用加密的.這樣就出現了防代理的模式:
這里用的CFNetwork.framework框架,進行代理的獲取.
這種介面的處理對於用戶開VPN的情況下很多時候是有錯誤的效果.他其實沒有代理想抓你包的意思.但是開的VPN會被認為是代理了,導致無法使用APP.
3.SSL Pinning
通過對服務端生成的.cer證書進行域名校驗,伺服器通過.crt證書導出.cer放到客戶端進行處理.
NSURLSession處理
或者是AF裡面自定義
證書會失效,證書由於是服務端生成的根據域名來的所以一般最長的是一年的證書.所以不能忘了換,不然可能會對介面請求產生問題.
那麼還有沒有不用證書來校驗的方式呢?還能防止抓包呢?
蘋果官方文檔
CFNetWork
這個屬性可以設置網路代理,默認值是 NULL,使用系統的代理設置。
configuration.connectionProxyDictionary = @{};
https://github.com/frankKiwi/FNKSafaNet.git
以上四個方案,建議是第一個加密 和 第四個結合處理.第四個對於H5頁面的網路請求還是可以抓到的.
IOS七層協議:
從下到上:
a.物理層:傳輸的是比特流,網卡位於這層。
b.數據鏈路層:本層傳輸的是幀;本層主要定義了如何格式化數據,錯誤檢測。交換機位於本層
c.網路層:本層傳輸的是數據包,路由器位於本層。本層協議是IP協議(Internet Protocol Address),主要功能是路由選擇最短路徑,將數據包從發送端路由到接收端
d.傳輸層:協議有TCP(傳輸控制協議)/UDP(用戶數據報協議);主要是控制重傳、數據分割之類的,主要是解決數據之間的傳輸,和傳輸質量。是IOS最核心的一層,其中TCP協議是最重要的協議
e.會話層:不同機器之間建立會話
f.表示層:解決不同系統之間的語法問題
g.應用層:應用網路中發送數據:需要注意Http協議(超文本傳輸協議),Https(超文本傳輸安全協議)
TCP/IP四層模型
與IOS七層模型相同,從下往上依次為:
a.鏈路層(物理層+數據鏈路層),
b.網路層(IP),
c.傳輸層(TCP),
d.應用層(應用層+表示層+會話層)(HTTP)。